2011-05-24 14 views
5

मुझे एहसास है कि रेगेक्स ईमेल सत्यापन का एक टन है, लेकिन मुझे ऐसा लगता है कि RFC 2822 मानक का पालन नहीं करता है।सी # ईमेल नियमित अभिव्यक्ति - आरएफसी 2822 दिशानिर्देशों का पालन करने वाले कोई भी व्यक्ति?

जो मुझे लगता है उन्हें जंक जैसे .. @ abc.com में मिलता है।

मुझे क्षमा करें यदि प्रश्नों में से एक को आरएफसी 2822 (लेकिन यह नहीं बताया गया है) का पालन करने का उत्तर दिया गया है।

+0

क्या आप ईमेल पते को सत्यापित करने का प्रयास कर रहे हैं? यह मानक संदेश प्रारूप के साथ ही अधिक चिंतित प्रतीत होता है। यदि हां, तो [email protected] के साथ क्या गलत है - मैंने सोचा होगा कि पर्याप्त मान्य होगा ... – Reddog

+2

@Reddog मैंने सोचा कि उसका शाब्दिक अर्थ है ".. @ abc.com"। –

+0

@ क्रिस - आहा, तो निश्चित रूप से विशेष मामला किसी भी रेगेक्स में जोड़ा जा सकता है? – Reddog

उत्तर

4

मैंने थोड़ी देर पहले a post on this किया था। हां, यह .NET regex का उपयोग करना संभव है, क्योंकि उनके पास "balancing groups" नामक गैर-नियमित सुविधा है।

पर्ल आरएफसी 822 जो अक्सर पोस्ट किया जाता है वह पूरी तरह से ईमेल पते से मेल नहीं खाता है, क्योंकि इसे टिप्पणियों को हटाने के लिए प्रीप्रोकैसिंग की आवश्यकता होती है। यह एक बहुत पुराने आरएफसी के लिए भी है (1 9 82 से!)।

यह रेगेक्स आरएफसी 5322 के लिए है, जो वर्तमान है। यह सभी टिप्पणियों और फोल्डिंग व्हाइटस्पेस को सही तरीके से संभालता है।

^(?'localPart'((((\((((?'paren'\()|(?'-paren'\))|([\u0021-\u 
0027\u002a-\u005b\u005d-\u007e]|[\u0001-\u0008\u000b\u000c\u 
000e-\u001f\u007f])|([ \t]+((\r\n)[ \t]+)?|((\r\n)[ \t]+)+)| 
\\([\u0021-\u007e]|[ \t]|[\r\n\0]|[\u0001-\u0008\u000b\u000c 
\u000e-\u001f\u007f]))*(?(paren)(?!)))\))|([ \t]+((\r\n)[ \t 
]+)?|((\r\n)[ \t]+)+))*?(([a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)|(
"(([ \t]+((\r\n)[ \t]+)?|((\r\n)[ \t]+)+)?(([\u0021\u0023-\u 
005b\u005d-\u007e]|[\u0001-\u0008\u000b\u000c\u000e-\u001f\u 
007f])|\\([\u0021-\u007e]|[ \t]|[\r\n\0]|[\u0001-\u0008\u000 
b\u000c\u000e-\u001f\u007f])))*([ \t]+((\r\n)[ \t]+)?|((\r\n 
)[ \t]+)+)?"))((\((((?'paren'\()|(?'-paren'\))|([\u0021-\u00 
27\u002a-\u005b\u005d-\u007e]|[\u0001-\u0008\u000b\u000c\u00 
0e-\u001f\u007f])|([ \t]+((\r\n)[ \t]+)?|((\r\n)[ \t]+)+)|\\ 
([\u0021-\u007e]|[ \t]|[\r\n\0]|[\u0001-\u0008\u000b\u000c\u 
000e-\u001f\u007f]))*(?(paren)(?!)))\))|([ \t]+((\r\n)[ \t]+ 
)?|((\r\n)[ \t]+)+))*?)(\.(((\((((?'paren'\()|(?'-paren'\))| 
([\u0021-\u0027\u002a-\u005b\u005d-\u007e]|[\u0001-\u0008\u0 
00b\u000c\u000e-\u001f\u007f])|([ \t]+((\r\n)[ \t]+)?|((\r\n 
)[ \t]+)+)|\\([\u0021-\u007e]|[ \t]|[\r\n\0]|[\u0001-\u0008\ 
u000b\u000c\u000e-\u001f\u007f]))*(?(paren)(?!)))\))|([ \t]+ 
((\r\n)[ \t]+)?|((\r\n)[ \t]+)+))*?(([a-zA-Z0-9!#$%&'*+/=?^_ 
`{|}~-]+)|("(([ \t]+((\r\n)[ \t]+)?|((\r\n)[ \t]+)+)?(([\u00 
21\u0023-\u005b\u005d-\u007e]|[\u0001-\u0008\u000b\u000c\u00 
0e-\u001f\u007f])|\\([\u0021-\u007e]|[ \t]|[\r\n\0]|[\u0001- 
\u0008\u000b\u000c\u000e-\u001f\u007f])))*([ \t]+((\r\n)[ \t 
]+)?|((\r\n)[ \t]+)+)?"))((\((((?'paren'\()|(?'-paren'\))|([ 
\u0021-\u0027\u002a-\u005b\u005d-\u007e]|[\u0001-\u0008\u000 
b\u000c\u000e-\u001f\u007f])|([ \t]+((\r\n)[ \t]+)?|((\r\n)[ 
\t]+)+)|\\([\u0021-\u007e]|[ \t]|[\r\n\0]|[\u0001-\u0008\u0 
00b\u000c\u000e-\u001f\u007f]))*(?(paren)(?!)))\))|([ \t]+((
\r\n)[ \t]+)?|((\r\n)[ \t]+)+))*?))*))@(?'domain'((((\((((?' 
paren'\()|(?'-paren'\))|([\u0021-\u0027\u002a-\u005b\u005d-\ 
u007e]|[\u0001-\u0008\u000b\u000c\u000e-\u001f\u007f])|([ \t 
]+((\r\n)[ \t]+)?|((\r\n)[ \t]+)+)|\\([\u0021-\u007e]|[ \t]| 
[\r\n\0]|[\u0001-\u0008\u000b\u000c\u000e-\u001f\u007f]))*(? 
(paren)(?!)))\))|([ \t]+((\r\n)[ \t]+)?|((\r\n)[ \t]+)+))*?(
([a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)|("(([ \t]+((\r\n)[ \t]+)?| 
((\r\n)[ \t]+)+)?(([\u0021\u0023-\u005b\u005d-\u007e]|[\u000 
1-\u0008\u000b\u000c\u000e-\u001f\u007f])|\\([\u0021-\u007e] 
|[ \t]|[\r\n\0]|[\u0001-\u0008\u000b\u000c\u000e-\u001f\u007 
f])))*([ \t]+((\r\n)[ \t]+)?|((\r\n)[ \t]+)+)?"))((\((((?'pa 
ren'\()|(?'-paren'\))|([\u0021-\u0027\u002a-\u005b\u005d-\u0 
07e]|[\u0001-\u0008\u000b\u000c\u000e-\u001f\u007f])|([ \t]+ 
((\r\n)[ \t]+)?|((\r\n)[ \t]+)+)|\\([\u0021-\u007e]|[ \t]|[\ 
r\n\0]|[\u0001-\u0008\u000b\u000c\u000e-\u001f\u007f]))*(?(p 
aren)(?!)))\))|([ \t]+((\r\n)[ \t]+)?|((\r\n)[ \t]+)+))*?)(\ 
.(((\((((?'paren'\()|(?'-paren'\))|([\u0021-\u0027\u002a-\u0 
05b\u005d-\u007e]|[\u0001-\u0008\u000b\u000c\u000e-\u001f\u0 
07f])|([ \t]+((\r\n)[ \t]+)?|((\r\n)[ \t]+)+)|\\([\u0021-\u0 
07e]|[ \t]|[\r\n\0]|[\u0001-\u0008\u000b\u000c\u000e-\u001f\ 
u007f]))*(?(paren)(?!)))\))|([ \t]+((\r\n)[ \t]+)?|((\r\n)[ 
\t]+)+))*?(([a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)|("(([ \t]+((\r\ 
n)[ \t]+)?|((\r\n)[ \t]+)+)?(([\u0021\u0023-\u005b\u005d-\u0 
07e]|[\u0001-\u0008\u000b\u000c\u000e-\u001f\u007f])|\\([\u0 
021-\u007e]|[ \t]|[\r\n\0]|[\u0001-\u0008\u000b\u000c\u000e- 
\u001f\u007f])))*([ \t]+((\r\n)[ \t]+)?|((\r\n)[ \t]+)+)?")) 
((\((((?'paren'\()|(?'-paren'\))|([\u0021-\u0027\u002a-\u005 
b\u005d-\u007e]|[\u0001-\u0008\u000b\u000c\u000e-\u001f\u007 
f])|([ \t]+((\r\n)[ \t]+)?|((\r\n)[ \t]+)+)|\\([\u0021-\u007 
e]|[ \t]|[\r\n\0]|[\u0001-\u0008\u000b\u000c\u000e-\u001f\u0 
07f]))*(?(paren)(?!)))\))|([ \t]+((\r\n)[ \t]+)?|((\r\n)[ \t 
]+)+))*?))*)|(((\((((?'paren'\()|(?'-paren'\))|([\u0021-\u00 
27\u002a-\u005b\u005d-\u007e]|[\u0001-\u0008\u000b\u000c\u00 
0e-\u001f\u007f])|([ \t]+((\r\n)[ \t]+)?|((\r\n)[ \t]+)+)|\\ 
([\u0021-\u007e]|[ \t]|[\r\n\0]|[\u0001-\u0008\u000b\u000c\u 
000e-\u001f\u007f]))*(?(paren)(?!)))\))|([ \t]+((\r\n)[ \t]+ 
)?|((\r\n)[ \t]+)+))*?\[(([ \t]+((\r\n)[ \t]+)?|((\r\n)[ \t] 
+)+)?([!-Z^-~]|[\u0001-\u0008\u000b\u000c\u000e-\u001f\u007f 
]))*([ \t]+((\r\n)[ \t]+)?|((\r\n)[ \t]+)+)?\]((\((((?'paren 
'\()|(?'-paren'\))|([\u0021-\u0027\u002a-\u005b\u005d-\u007e 
]|[\u0001-\u0008\u000b\u000c\u000e-\u001f\u007f])|([ \t]+((\ 
r\n)[ \t]+)?|((\r\n)[ \t]+)+)|\\([\u0021-\u007e]|[ \t]|[\r\n 
\0]|[\u0001-\u0008\u000b\u000c\u000e-\u001f\u007f]))*(?(pare 
n)(?!)))\))|([ \t]+((\r\n)[ \t]+)?|((\r\n)[ \t]+)+))*?))\z 

कुछ चेतावनियां, तथापि:

यहाँ regex है। आरएफसी 5322 वास्तविक डोमेन आरएफसी की तुलना में डोमेन नामों के साथ अधिक उदार है, और ऐसे अन्य प्रतिबंध हैं जो विभिन्न आरएफसी जैसे वास्तविक एसएमटीपी आरएफसी (जो अधिकतम लंबाई निर्दिष्ट करते हैं) से लागू होते हैं। इसलिए 5322 के अनुसार एक ईमेल सही है, फिर भी यह कई अन्य उपायों से अमान्य हो सकता है।

सुनहरा परीक्षण अभी भी सत्यापन कोड के साथ पते पर एक ईमेल भेजना है।

2

This is for RFC822, नए के लिए नहीं। लेकिन ऐसा लगता है कि पता प्रारूप has not been changed है, इसलिए आप जो खोज रहे हैं वह होना चाहिए।

(ध्यान दें regexp नीचे टिप्पणी - यह अभी भी मानता है कि पता preprocessed किया गया है)

+0

वाह, मुझे लगता है कि कोई काम करेगा, लेकिन अगर यह नहीं है तो अच्छी किस्मत इसे डिबग कर रही है। – Reddog

+0

असल में, एक चीसो पोस्ट करने वाले शुभकामनाएं पोस्ट की गईं। 32K! ऐसा लगता है कि किसी के बच्चे को कीबोर्ड पर 20 मिनट तक बढ़ा दिया गया है! –

+0

2822 है यह भी अप्रचलित है। यह पृष्ठ पर भी ऐसा कहता है :) – porges

1

यह PCRE में चलता है: http://code.iamcal.com/php/rfc822/full_regexp.txt

यह 32k है, जाहिरा तौर पर।

गंभीरता से - शायद एक एकल regexp का उपयोग करके बैकिंग पर विचार करें, या सभी संभावित ईमेल फॉर्म स्वीकार कर रहे हैं।

0

मैं इसे देखता हूं: http://www.regular-expressions.info/email.html, जो ईमेल पते से मेल खाने के लिए नियमित अभिव्यक्तियों का उपयोग करने के बारे में बहुत कुछ बताता है, और इसमें एक पूर्ण आरएफसी 2822 अभिव्यक्ति शामिल है जो ईमानदारी से मैं लगभग कभी भी अनुशंसा नहीं करता।

संबंधित मुद्दे