2014-01-27 2 views
0

나는 SIM 번호를 입력해야하는 입력 필드가 있습니다. 콩의 해당 필드에 대해 다음 유효성 검증 표현식을 넣습니다.@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 자리 또는 빈 줄 (숫자 또는 문자 없음)이 포함 된 문장과 만 일치하기 때문에 사용할 수 있습니다.