RFC 5321 ( 5322 में कुछ व्याकरण के नियम ) में छूट के साथ एक ई-मेल पते को मान्य करने के लिए एक फ़ंक्शन या प्रोग्राम लिखें, इस छूट के साथ कि आप टिप्पणियों और तह व्हाट्सएप ( CFWS) और सामान्यीकृत पता शाब्दिकों को अनदेखा कर सकते हैं । यह व्याकरण देता है
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
नोट: मैंने इसकी परिभाषा को छोड़ दिया है IPv6-addrक्योंकि यह विशेष RFC गलत है और उदा ::1। सही युक्ति RFC 2373 में है ।
प्रतिबंध
आप किसी भी मौजूदा ई-मेल सत्यापन लाइब्रेरी कॉल का उपयोग नहीं कर सकते हैं। हालाँकि, आप आईपी पते की जाँच करने के लिए मौजूदा नेटवर्क पुस्तकालयों का उपयोग कर सकते हैं।
यदि आप एक फ़ंक्शन / विधि / ऑपरेटर / समतुल्य लिखते हैं, तो उसे एक स्ट्रिंग लेनी चाहिए और अपनी भाषा के लिए एक बूलियन या सत्य / मिथ्या मूल्य वापस करना चाहिए। यदि आप एक प्रोग्राम लिखते हैं, तो उसे स्टड से एक ही लाइन लेनी चाहिए और निकास कोड के माध्यम से वैध या अमान्य इंगित करना चाहिए।
परीक्षण के मामलों
निम्नलिखित परीक्षण मामलों को कॉम्पैक्टनेस के लिए ब्लॉकों में सूचीबद्ध किया गया है। पहले ब्लॉक ऐसे मामले हैं जो पास होने चाहिए:
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
निम्नलिखित परीक्षण मामले पास नहीं होने चाहिए:
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और ?????@domain.comअसफल?
IPv6-addrअपरिभाषित छोड़ दिया गया है, और ऐसे परीक्षण मामले हैं जिनके पास आईपीवी 6 पते हैं, क्या उन्हें सत्यापित करने का एक सही तरीका है?