2016-06-14 3 views
1

유효성 검사 주석을 사용하여 전자 메일 필드의 유효성을 검사합니다. 여기 전자 메일 필드는 필수가 아닙니다. 여전히 제출을 클릭하면 필드가 비어있을 때 유효성을 검사하고 오류 메시지가 표시됩니다.빈 필드에 @Pattern 유효성 확인

다음은 주석입니다

@Pattern(regexp = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$", 
      message = "registration.label.useremailformat.invalidformat") 
@Size(min = 6, max = 20, message = "registration.label.useremail.length") 
@SafeHtml 
private String userEmailId; 

이메일 필드가 비어있을 때 어떻게 @Pattern 검증을 생략 할 수 있고 값이 주어진 경우에만 확인? 어떤 도움을 주시면 감사하겠습니다.

+1

문자 클래스의'-' 위치가 잘못되었습니다. – rock321987

+0

패턴에 텍스트가 있어야합니다. 'regexp = "^ (? : [A-Za-z0-9- +] + (\\. [A-Za-z0-9-] +) * @ [A-Za-z0-9-] + (\\. [A-Za-z0-9] +) * (\\. [A-Za-z] {2,}))? 또한 '최소'매개 변수를 확인하십시오. –

+0

@Wiktor Stribiżew - 오류 메시지를 표시하지 않지만 양식이 제출되지 않습니다. – Thej

답변

0

@Size 제한은 전체 regex 패턴을 선택적으로 만든 후에도 양식 제출을 허용하지 않는 것으로 보입니다.

내가 정규식 패턴에 크기 제한을 이동 제안 해결 방법 :

regexp = "^(?:(?=.{6,20}$)[_A-Za-z0-9-+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+‌​‌​)*(\\.[A-Za-z‌​]{2,}))?$" 
외부 (?:...)?이 가능 빈 문자열을 일치하도록 만드는 당신의 패턴을 둘러싸

(?=.{6,20}$)는 긍정적 예측 즉 - 이전은 패턴 일치 - 텍스트에 6 ~ 20 자의 문자가 있는지 확인합니다. 적거나 많으면 일치가 실패합니다.

유일한 단점은 오류 메시지 하나만 표시 할 수 있다는 것입니다.

0

은 빈 문자열 @Size을 제거 허용하도록 정규 표현식을 수정

@Pattern("^$|(<<old regexp>>)") 
@SafeHtml 
private String userEmailId; 

... <<old regex>> 현재 긴 정규 표현식에 대한 자리 표시 자입니다.

관련 문제