Yorumları ve katlama boşluklarını ( ) ve genelleştirilmiş adres değişimlerini yok sayabileceğiniz rahatlama ile RFC 5321'e ( 5322'de bulunan bazı dilbilgisi kuralları ) karşı bir e-posta adresini doğrulamak için bir işlev veya program yazın CFWS
. Bu dilbilgisini verir
Mailbox = Local-part "@" ( Domain / address-literal )
Local-part = Dot-string / Quoted-string
Dot-string = Atom *("." Atom)
Atom = 1*atext
atext = ALPHA / DIGIT / ; Printable US-ASCII
"!" / "#" / ; characters not including
"$" / "%" / ; specials. Used for atoms.
"&" / "'" /
"*" / "+" /
"-" / "/" /
"=" / "?" /
"^" / "_" /
"`" / "{" /
"|" / "}" /
"~"
Quoted-string = DQUOTE *QcontentSMTP DQUOTE
QcontentSMTP = qtextSMTP / quoted-pairSMTP
qtextSMTP = %d32-33 / %d35-91 / %d93-126
quoted-pairSMTP = %d92 %d32-126
Domain = sub-domain *("." sub-domain)
sub-domain = Let-dig [Ldh-str]
Let-dig = ALPHA / DIGIT
Ldh-str = *( ALPHA / DIGIT / "-" ) Let-dig
address-literal = "[" ( IPv4-address-literal / IPv6-address-literal ) "]"
IPv4-address-literal = Snum 3("." Snum)
IPv6-address-literal = "IPv6:" IPv6-addr
Snum = 1*3DIGIT
; representing a decimal integer value in the range 0 through 255
Not: IPv6-addr
Çünkü bu belirli RFC yanlış alır ve ör ::1
. İzin vermez tanımı atladım . Doğru özellik RFC 2373'te .
Kısıtlamalar
Mevcut herhangi bir e-posta doğrulama kitaplığı çağrısını kullanamazsınız. Ancak, IP adreslerini kontrol etmek için mevcut ağ kitaplıklarını kullanabilirsiniz.
Bir işlev / yöntem / operatör / eşdeğeri yazarsanız, bir dize almalı ve dilinize uygun olarak bir boole veya doğruluk / falsy değeri döndürmelidir. Bir program yazarsanız, stdin'den tek bir satır almalı ve çıkış kodu aracılığıyla geçerli veya geçersiz olduğunu göstermelidir.
Test senaryoları
Aşağıdaki test durumları kompaktlık için bloklar halinde listelenmiştir. İlk blok geçmesi gereken vakalardır:
email@domain.com
e@domain.com
firstname.lastname@domain.com
email@subdomain.domain.com
firstname+lastname@domain.com
email@123.123.123.123
email@[123.123.123.123]
"email"@domain.com
1234567890@domain.com
email@domain-one.com
_______@domain.com
email@domain.name
email@domain.co.jp
firstname-lastname@domain.com
""@domain.com
"e"@domain.com
"\@"@domain.com
email@domain
"Abc\@def"@example.com
"Fred Bloggs"@example.com
"Joe\\Blow"@example.com
"Abc@def"@example.com
customer/department=shipping@example.com
$A12345@example.com
!def!xyz%abc@example.com
_somename@example.com
_somename@[IPv6:::1]
fred+bloggs@abc.museum
email@d.com
?????@domain.com
Aşağıdaki test durumları geçmemelidir:
plainaddress
#@%^%#$@#$@#.com
@domain.com
Joe Smith <email@domain.com>
email.domain.com
email@domain@domain.com
.email@domain.com
email.@domain.com
email.email.@domain.com
email..email@domain.com
email@domain.com (Joe Smith)
email@-domain.com
email@domain..com
email@[IPv6:127.0.0.1]
email@[127.0.0]
email@[.127.0.0.1]
email@[127.0.0.1.]
email@IPv6:::1]
_somename@domain.com]
email@[256.123.123.123]
email@d.com
ve ?????@domain.com
başarısız olmalı ?
IPv6-addr
sol onları doğrulamak için doğru yolu yoktur, tanımsız ve IPv6 adresleri Test durumlar vardır olmuştur?