2014-01-27 23 views
0

我有一個輸入字段,必須輸入SIM號碼。對於在bean那場我把下面的驗證表達式:@Pattern正則表達式不檢查空值

@Pattern(regexp = "^(?:\\d{19})$", message = "{validation.notValidSIMNumber}") 

這應該是「只有19位數字被接受」。

我預計如果該字段留空,驗證也會聲稱。

但不是沒有錯誤消息......

編輯: 對不起,我寫了假的正則表達式(與|末)。 所以,要清楚:我需要驗證輸入字段,它必須是19位數字。沒有可能將它留空。

使用上面的正則表達式,如果我將它留空,我不會收到任何錯誤消息,但只要我輸入的內容不是19位數字,就會收到錯誤消息。

+3

是否爲空值「ok」或不是?如果它不是你想要的,那麼刪除'|'。它的意思是「或」。由於你沒有任何東西,它會驗證空字符串 – HamZa

+0

我沒有經驗的bean驗證,但它聽起來像不能從一個輸入字段單獨檢查。您應該在用戶提交表單或其他內容時進行檢查,並確保每個必填字段都不爲空。當用戶顯示錶單時防止輸入字段爲空是沒有意義的,否則用戶在做任何事情之前都會收到錯誤信息。 – Jerry

+0

@Jerry你可能是對的;有註釋'@NotNull',但我只是認爲'@ Pattern'是「更強大」,可能還包括第一個... – Francesco

回答

3

模式^\\d{19}$應該足夠了。

0

你的代碼是:^(?:\\d{19}|)$

enter image description here

更改您的代碼:

@Pattern(regexp = "^(?:\\d{19})$|^$", message = "{validation.notValidSIMNumber}") 

說明:

enter image description here

0

嘗試:

System.out.println("1234567891234568977".matches("^[0-9]{19}$")); 
0

希望你需要匹配19位數字,它也似乎是行的開始和結束。

因此,您可以使用(^(\ d {19})$)* - 因爲它僅匹配包含19位數字或空行(不帶任何數字或字符)的句子。