2011-02-09 18 views
8

Yeni <input type="email" /> öğesini kullanmak istiyorum. Tarayıcıda gerçekleşen sunucuda aynı doğrulamayı uygulayan Java koduna sahip olmak isterim.HTML5 giriş e-posta doğrulamasının bir Java uygulaması var mı?

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: olarak ABNF içinde

The HTML5 spec defines email addresses

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

Bu olup aynı kurallarde tarif edildiği gibidir. Bir adresin Java'da bu kurallara uygun olduğunu nasıl test edebilirim?

Teşekkürler!

Bir normal ifadeler kullanabilirsiniz
+0

Hazır bir çözümün var olup olmadığını bilmiyorum, ancak bulamıyorsanız, PEP ile kolayca bir tane oluşturabilirsiniz. http://www.ling.ohio-state.edu/~scott/ – biziclop

cevap

6

: Aslında

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

+0

'kullanıcı @ etki alanı 'bununla doğrulanır. '@' Sonrası bir noktaya ihtiyacınız yok mu? – Adam

+0

@Adam: Tanımınız bu anlama geliyor. Sorunuzu cevaplamak için teknik olarak hayır. – SLaks

+0

Benim hatam.ABNF içinde '*' 0 içerir – Adam

1

, The W3C Recommendation you've cited geçerli bir e-posta adresi tanımlayan ABNF olarak takdim ne eşdeğeri olarak bir regex sunmaktadır:

/^[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])?)*$/ 

Ama bu düzenli ifade geçersiz maçları ".any..address. @ 123" gibi e-posta adresleri (https://regex101.com/ ile test edilmiştir).

Bu regex (Wikipedia göre, e-posta adresine tüm geçersiz) kabul eder:

  • "" Yerel bölümün başında (nokta)
  • "." (nokta) yerel bölümün sonunda
  • çoklu sıralı "."
  • sadece sayılar alanı kısmen yerel kısmen (nokta)

ve (Wikipedia göre geçerlidir) reddeder: tırnak ile sınırlandırılmış

  • bazı özel karakterler

    • Unicode karakterleri()

    W3C'nin, sundukları belirtim willful violationRFC 5322 olup, geçerli durumları bırakmak için "bahane" ye sahiptir, ancak IMHO geçersiz adresleri kabul etmenin bir nedeni değildir.

    Bu istisna durumlarıyla uğraşmayacaksanız, W3C'nin önerdiği ifadeleri kullanabilirsiniz. Aksi takdirde, ele almak istediğiniz vakaları kapsayacak şekilde regex çalışmalısınız.

  • +0

    Tüm ASCII olmayan karakterleri, punycode sürümünde gerçekleştirilmesi gerektiği gibi reddetmez, bu nedenle, 'example @ яндекс.рф', ilk olarak, örnek olarak, geçen örnek olan '@ xn - d1acpjx3f.xn - p1ai' türüne dönüştürülür. . Yine de, geçerli olmayan e-posta adreslerini ASCII olmayan karakterlerle reddetmeden önce. –

    İlgili konular