2013-08-29 76 views
0

對編程新手抱歉。顯然,我希望在發佈之前知道關於該主題的所有內容。我只做了3周,隨着我的學習。使用正則表達式來驗證字段

我有一個字段限制爲5個字符我試圖驗證。第一個字符必須是字母,並且以下4個字符必須是數字。在這一點上,Regex對我來說像是希臘語,所以我遇到了麻煩。我已經能夠得到確認的第一個字符,但我難倒剩餘4。這裏是我的代碼:

if (carID.substring(0, 1).matches("[0-9]")) { 
    showDataFormatError(); 
    break; 
} else { 
    if (carID.substring(1, 5).matches("[a-zA-Z]")) { 
    showDataFormatError(); 
    break; 
    } 
} 

更新在這一點上,以證明我可怕的編碼。

  if (carID.length() < 5) { 
       showDataLengthError(); 
       break; 
      } else { 
       if (carID.matches("^[a-zA-Z][0-9]{4}$")) { 
        showDataFormatError(); 
        break; 
       } else { 
        if (carYearString.length() < 0) { 
         showDateLengthError(); 
         break; 
        } else { 
         try { 
          int carYear = Integer.parseInt(carYearString); 
          int currentYear = Calendar.getInstance().get(
            Calendar.YEAR); 

// etc. 
+1

嘗試'carID.matches(「^ [A-Za-z] \\ d {4} $」)'。 – falsetru

+0

您可以從[here](http://www.regular-expressions.info/)和[here](http://docs.oracle.com/javase/7/docs/api/java/)瞭解正則表達式的基本知識。 util/regex/Pattern.html) –

+0

@falsetru似乎根本不起作用。 –

回答

2

試試這個

boolean valid = carID.matches("^[a-zA-Z][0-9]{4}$"); 

而看到the tutorial

編輯感謝選民下來我發現和修正錯誤。

+0

也似乎沒有工作。 –

+1

你能舉一個例子嗎?' String carID =「a1234」; boolean valid = carID.matches(「^ [a-zA-Z] [0-9] {4} $」); System.out.println(「carID」+ valid); 'outputs' carID true ' – andy256

+0

I只是更新了我上面的代碼片段 –

2

如果你想確保整個字符串是格式,使用:

^[a-zA-Z]\d{4}$ 

這將幫助你和教程,你應該去通過這個鏈接

Regular Expression

1

我會做點像..

\pL  Matches Any kind of letter from any language. 
\pN{4} Matches Any kind of numeric character in any script. (4 times) greedy. 

...

if (carID.length() > 5) throw IllegalArgumentException(); 

if (carID.matches("^\pL\pN{4}$")){ 
    return true; 
} else { 
    return false; 

    ... 
}