2011-02-09 3 views
8

새로운 <input type="email" /> 요소를 사용하고 싶습니다. 나는 브라우저에서 발생하는 서버에서 동일한 유효성 검사를 구현하는 Java 코드를 원합니다.HTML5 입력 전자 메일 유효성 검사의 Java 구현이 있습니까?

1*(atext/".") "@" ldh-str *("." ldh-str) 

where :

<ldh-str> ::= <let-dig-hyp> | <let-dig-hyp> <ldh-str> 

<let-dig-hyp> ::= <let-dig> | "-" 

<let-dig> ::= <letter> | <digit> 

<letter> ::= any one of the 52 alphabetic characters A through Z in upper case and a through z in lower case 

<digit> ::= any one of the ten digits 0 through 9 

and : 같은 ABNF에서

The HTML5 spec defines email addresses

atext   = ALPHA/DIGIT/ ; Printable US-ASCII 
         "!"/"#"/  ; characters not including 
         "$"/"%"/  ; specials. Used for atoms. 
         "&"/"'"/
         "*"/"+"/
         "-"/"/"/
         "="/"?"/
         "^"/"_"/
         "`"/"{"/
         "|"/"}"/
         "~" 

이들은 하지 동일한 규칙은 01,236,108,938 같이 있습니다. 주소가 Java에서 이러한 규칙을 준수하는지 테스트 할 수 있습니까?

감사합니다.

당신은 정규식 사용할 수 있습니다
+0

readymade 솔루션이 있는지는 잘 모르겠지만 아무 것도 찾을 수 없다면 PEP로 쉽게 만들 수 있습니다. http://www.ling.ohio-state.edu/~scott/ – biziclop

답변

6

: 사실

[A-Za-z0-9!#$%&'*+-/=?^_`{|}~][email protected][A-Za-z0-9-]+(.[A-Za-z0-9-]+)*

+0

'user @ domain'이 그것으로 유효성을 검사합니다. '@'다음에 점이 필요하지 않습니까? – Adam

+0

@Adam : 이것은 귀하의 정의가 의미하는 것입니다. 귀하의 질문에 기술적으로 대답하려면, 아니오. – SLaks

+0

제 잘못입니다.ABNF의'* '에는 0이 포함되어 있습니다. – Adam

1

The W3C Recommendation you've cited은 유효한 이메일 주소를 정의하는 ABNF으로 제시 무엇에 대한 동등하게 정규식을 제공합니다

/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-][email protected][a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/ 

을하지만이 정규식이 잘못 일치 ".any..address. @ 123"(https://regex101.com/으로 테스트 됨)과 같은 이메일 주소

이 정규식 (Wikipedia에 따라, 이메일 주소의 모든 무효) 허용합니다

  • 을 "." (도트)
  • "." (점) 로컬 부분의 끝에
  • 여러 순차 "."
  • 숫자 만 도메인 부분에서 로컬 부분에서 (점)

과 (위키 백과에 따라 유효) 거부 : 인용 부호로 구분

  • 일부 특수 문자

    • 유니 코드 문자 (")

    W3C는 그들이 제시하는 사양은 RFC 5322willful violation이므로 유효한 사례를 무시하는 "변명"이 있지만 잘못된 주소를 허용 할 이유는 없습니다.

    이러한 예외 상황에 신경 쓰지 않는다면 W3C에서 제안하는 정규식을 사용할 수 있습니다. 그렇지 않으면 처리하려는 케이스를 커버하기 위해 정규식을 사용해야합니다.

  • +0

    punycode 버전에서 수행해야하는 모든 비 ASCII 문자를 거부하지 않으므로 'example @ яндекс.рф'는 먼저'example @ xn - d1acpjx3f.xn - p1ai'로 바뀝니다. . 그것은'@ '앞에 비 ASCII 문자로 유효한 전자 메일 주소를 거부하지만 않습니다. –

    관련 문제