2008-12-15 8 views
10

मैं वीबी.Net में एक छोटी परियोजना पर काम कर रहा हूं जहां मुझे टेक्स्टबॉक्स से इनपुट मिलता है, और यह सत्यापित करने की आवश्यकता है कि यह एक ई-ईमेल पता है।नियमित अभिव्यक्ति के साथ ई-मेल मान्य करना VB.Net

मुझे यह अभिव्यक्ति मिली "^ [_ a-z0-9 -] + (। [_ A-z0-9 -] +) @ [a-z0-9 -] + (। [A-z0-9 -] +) (। [Az] {2,4}) $ ", लेकिन अगर यह गुजरता है तो परीक्षण करने के लिए मुझे कोई रास्ता नहीं मिल रहा है।

if not txtEmail.text = regexString then 
    something happens.. 
else 
    something else happens.. 
end if 
+1

मैं तथ्य यह है कि यदि आप "के लिए गूगल की ओर आकर्षित हो सकते हैं vb.net regex ", _first_ लिंक आपको इसके लिए चरण-दर-चरण निर्देश देता है? – Svante

+2

स्टैक ओवरफ्लो पर रिकॉर्ड करने के लिए यह एक अच्छा सवाल है - मुझे यह पूछने में कुछ भी गलत नहीं लगता है। – Jeffrey

उत्तर

18

System.Text.RegularExpressions.Regex वर्ग का उपयोग करें::

Function IsEmail(Byval email as string) as boolean 
    Static emailExpression As New Regex("^[_a-z0-9-]+(.[a-z0-9-]+)@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,4})$") 

    return emailExpression.IsMatch(email) 
End Function 

इस उत्तर के बारे में समझने के लिए सबसे महत्वपूर्ण बात यह है कि मैं अपने आप को नियमित अभिव्यक्ति नहीं लिखा था

मैं जैसे कुछ कोड चाहते हैं। ऐसे कई गलत तरीके हैं जो सही प्रतीत होते हैं, और विस्तार के कई स्तर हैं जिन्हें आप इसे ले सकते हैं। उदाहरण के लिए, क्या आप इसे वैध शीर्ष स्तर डोमेन पर प्रतिबंधित करना चाहते हैं, और यदि हां, तो आप इस तथ्य के लिए कैसे लेखांकन कर रहे हैं कि वे कभी-कभी नए टीएलडी जोड़ रहे हैं? यदि नियमित अभिव्यक्ति उस परीक्षण के लिए सबसे उपयुक्त स्थान है, या उस चेक के लिए अलग कोड होना चाहिए? यहां तक ​​कि इस जवाब में अभिव्यक्ति अब भी बहुत पुरानी है क्योंकि इसे मूल रूप से लिखा गया था। मैं अनुशंसा करता हूं कि वह संसाधन ढूंढें जिसे आप अभिव्यक्ति के लिए उपयोग कर सकते हैं जिसे आप जानते हैं।

+3

'अगर ... फिर ट्रू एल्से रिटर्न झूठी वापसी 'निश्चित रूप से एंटी-पैटर्न के शीर्ष दस शीर्ष दस में है। : -/ –

+0

हाँ: यह मेरी पिछली गग में अधिग्रहित एक बुरी आदत है, जहां नीति ने सीधे बुलियन अभिव्यक्तियों के परिणामों को वापस करने से रोका। नमूना ठीक करें। –

+0

मैंने पाया कि इसे "नई प्रणाली के रूप में होना चाहिए। टेक्स्ट। रेगुलरएक्सप्रेस। रेगेक्स" जहां यह मदद के लिए "नई रेगेक्स" थक्स कहता है :) – AndersE

5

इस तरह की चीज़, http://regexlib.com/ के लिए एक महान वेबसाइट है। न केवल इसमें एक परीक्षक आवेदन होता है जहां आप नियमित अभिव्यक्ति में पेस्ट कर सकते हैं और इसका परीक्षण कर सकते हैं, लेकिन नियमित अभिव्यक्तियों की एक लाइब्रेरी भी है जिसका उपयोग आप अपनी वैधता आदि पर समुदाय प्रतिक्रिया के साथ कर सकते हैं। मैं एक रेगेक्स गुरु नहीं हूं, इसलिए मैं यहां जाता हूं जब मुझे त्वरित नियमित अभिव्यक्ति की आवश्यकता होती है।

इसके अलावा, यदि आप नियमित रूप से अभिव्यक्तियों को विकसित करने के बारे में सोच रहे हैं, तो Regex Buddy नामक एक उत्कृष्ट उपकरण है जो आपको अपने रेगेक्स की अंग्रेजी व्याख्या को समझने में आसानी से उड़ने पर अपने नियमित अभिव्यक्तियों को बनाने और परीक्षण करने की अनुमति देगा।

+0

मेरे पास ऐसा कोई मामला था जहां एक ईमेल उपरोक्त सरल regex को विफल कर रहा था"^[_a-Z0-9 -] ([एक-Z0-9 -]। +) @ [एक-Z0-9 -] ([एक-Z0-9 -]। +)। * ([az] { 2,4}) $ "। यहां वापस लौटने पर मैंने regexlib का उपयोग किया था कि एंडरसन उच्चतम रेटेड "ईमेल" regexs के लिए साझा करने और खोजने के लिए काफी दयालु था। 4 हिट थे और यह सूची में सबसे ऊपर था और मेरे लिए सबसे अच्छा काम करता था: "^ ((([! # $% और '* + \ -/=?^_' {|} ~ \ W]) | ([# $% &! '* + \ -/=^_ '? {|} ~ \ डब्ल्यू] [# $% &!' * + \ -/=^_'?। {|} ~ \ \ w !] {0,} [# $% & '* + \ -/=^_ '? {|} ~ \ डब्ल्यू])) [@] \ w + ([-] \ w +) * \ \ w + (।। [-।] \ w +) *) $ "स्रोत और परीक्षण पृष्ठ यहां: http://regexlib.com/RETester.aspx?regexp_id=2558 –

2

कि रेगेक्स वास्तव में पूरा नहीं है ... वास्तव में ... अधिकांश नहीं हैं (this article, या this one देखें)।

जब तक आप वास्तव में दर्द का आनंद नहीं लेते, रेगेक्स ईमेल पते को सत्यापित करने का सही तरीका नहीं है।

+1

क्या आप सभी को बता सकते हैं कि .NET में किसी ईमेल पते को सत्यापित करने का सही तरीका क्या है ? –

-2

ईमेल पता: आरएफसी 2822 (सरलीकृत) एक सामान्य ईमेल पता मेल खाता है। शीर्ष-स्तरीय डोमेन की जांच नहीं करता है। "केस असंवेदनशील" विकल्प चालू होने की आवश्यकता है।

Dim FoundMatch As Boolean 
Try 
    FoundMatch = Regex.IsMatch(txtEmail.text, "\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z", RegexOptions.IgnoreCase) 
Catch ex As ArgumentException 
    'Syntax error in the regular expression 
End Try 

If Not FoundMatch Then 
    Error = True 
Else 
    Error = False 
End If 
+0

अभिव्यक्ति टूट गई है (उदाहरण के लिए, केवल-केवल-पते को अनुमति नहीं है)। Http://stackoverflow.com/questions/369543/validating-e-mail-with-regular-expression-vbnet#369614 – bzlm

+0

उदाहरण टूटा नहीं है देखें। यह शीर्ष स्तर के डोमेन की जांच नहीं करता है। जैसा कि मैंने अपनी टिप्पणी में उल्लेख किया है। ऐसा करने के लिए मेरी दूसरी टिप्पणी देखें। – Mick

+3

मैं कभी नहीं समझूंगा कि कोई भी इस स्निपेट में आपके आखिरी व्यक्ति की तरह एक आईएफ स्टेटमेंट क्यों लिखता है। यह सिर्फ पागल है। यह होना चाहिए: त्रुटि = नहीं मिला मैच –

6

my article on matching email addresses with a regex से अपने पसंदीदा regex उठाओ, और इस Visual Basic कोड में प्लग:

If Regex.IsMatch(SubjectString, "regex") Then 
    Error = False 
Else 
    Error = True 
End If 

सबसे अच्छा regex एक ईमेल पते से मेल करने के एक विवादास्पद विषय है कि मैं पाने के लिए नहीं करना चाहती है यहाँ में मेरा आलेख उन मुद्दों पर चर्चा करता है जिन्हें रेगेक्स चुनते समय आपको अवगत होना चाहिए। जोएल Coehoorn के जवाब में regex निश्चित रूप से एक अच्छा नहीं है।

+0

लिंक किए गए वेब पेज पर विभिन्न ट्रेड-ऑफ़ का अच्छा विवरण। – WileCau

5

शायद विषय से हटकर यह एक regex समाधान नहीं है, लेकिन आप केवल से कुछ का उपयोग कर सकता है के बाद से .NET 2.0 की सुविधाओं में बनाया गया:

try 
{ 
    MailAddress email = new MailAddress(txtEmail.Text); 
} 
catch(FormatException fe) 
{ 
    // output error 
} 
+1

यह इस परियोजना में हर जगह है जहां मैं इस समय काम कर रहा हूं और मैं इसे बाहर निकाल रहा हूं। मैं नहीं देखता कि अपवाद फेंकना अच्छा तर्क या सत्यापन तकनीक है, इसके अलावा यह एक महंगा काम है। मुझे सही करने के लिए स्वतंत्र महसूस करें हालांकि –

+0

मुझे इसे तोड़ने में मुश्किल हो रही थी, मैंने इसे सभी प्रकार के कचरे के ईमेल पास कर दिए और इसे अपवाद के बिना उन्हें घुमाया और मैंने इसे अपने कोड से हटा दिया। –

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