2009-06-15 12 views
9

संभव डुप्लिकेट:
What is the best regular expression for validating email addresses?ईमेल नियमित अभिव्यक्ति

डुप्लिकेट: What is the best regular expression for validating email addresses?

मैं जानता हूँ कि यह एक आम सवाल है, लेकिन मैं अभी भी एक महान नियमित अभिव्यक्ति को खोजने के लिए नहीं कर पा रहे ईमेल पते को सत्यापित करते समय उपयोग करने के लिए।

मेरे पास वास्तव में spec पढ़ने और अपना खुद का लिखने के लिए समय नहीं है। पहले क्या उपयोग किया जाएगा, और यह अच्छी तरह से काम किया है? मुझे वास्तव में स्पेक से मेल खाने वाले 100% की परवाह नहीं है, लेकिन बेहतर है।

+0

ईमेल रेगेक्स के बारे में बहुत सारे प्रश्न हैं। http://stackoverflow.com/questions/508108/regex-for-email-validation-closed – Macarse

उत्तर

13

यहाँ एक समारोह है कि मैं का उपयोग है। यह थोड़ा और अधिक से अधिक सिर्फ एक regex के माध्यम से ई-मेल पता चलाने करता है, लेकिन अब तक यह सबसे पूर्ण समाधान है कि मैंने पाया है:

function validEmail($email, $skipDNS = false) 
{ 
    $isValid = true; 
    $atIndex = strrpos($email, "@"); 
    if (is_bool($atIndex) && !$atIndex) 
    { 
     $isValid = false; 
    } 
    else 
    { 
     $domain = substr($email, $atIndex+1); 
     $local = substr($email, 0, $atIndex); 
     $localLen = strlen($local); 
     $domainLen = strlen($domain); 
     if ($localLen < 1 || $localLen > 64) 
     { 
     // local part length exceeded 
     $isValid = false; 
     } 
     else if ($domainLen < 1 || $domainLen > 255) 
     { 
     // domain part length exceeded 
     $isValid = false; 
     } 
     else if ($local[0] == '.' || $local[$localLen-1] == '.') 
     { 
     // local part starts or ends with '.' 
     $isValid = false; 
     } 
     else if (preg_match('/\\.\\./', $local)) 
     { 
     // local part has two consecutive dots 
     $isValid = false; 
     } 
     else if (!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain)) 
     { 
     // character not valid in domain part 
     $isValid = false; 
     } 
     else if (preg_match('/\\.\\./', $domain)) 
     { 
     // domain part has two consecutive dots 
     $isValid = false; 
     } 
     else if (!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/', str_replace("\\\\","",$local))) 
     { 
     // character not valid in local part unless 
     // local part is quoted 
     if (!preg_match('/^"(\\\\"|[^"])+"$/', str_replace("\\\\","",$local))) 
     { 
      $isValid = false; 
     } 
     } 

     if(!$skipDNS) 
     { 
      if ($isValid && !(checkdnsrr($domain,"MX") || checkdnsrr($domain,"A"))) 
      { 
      // domain not found in DNS 
      $isValid = false; 
      } 
     } 
    } 
    return $isValid; 
} 

कार्य है एक वैकल्पिक $ skipDNS तर्क सेट किया जा सकता है कि सही अगर आप एचओएस के लिए एमएक्स रिकॉर्ड मान्य नहीं करना चाहते हैं। अन्यथा फ़ंक्शन यह सत्यापित करने का प्रयास करेगा कि प्रदान किया गया ई-मेल पता वास्तव में वास्तविक ईमेल सर्वर पर मानचित्र करता है।

यह ध्यान रखना उपयोगी है कि अधिकांश RegEx ईमेल सत्यापन तकनीक अधिकांश ई-मेल पते को मान्य कर देगी, लेकिन संभवतः वे कुछ सावधानी से अमान्य पते या सबसे खराब तरीके से तैयार किए जाने की अनुमति देंगे .. कुछ और अस्पष्ट, लेकिन वैध ई-मेल पते पर असफल हो जाते हैं। अधिक जानकारी के लिए आप Internet Message Formats RFC देख सकते हैं जो ई-मेल पते के लिए अनुमत प्रारूप का वर्णन करता है।

+0

DNS रिकॉर्ड्स की जांच ... अच्छा दृष्टिकोण! –

+0

यह वास्तव में कुछ भी RedOS के लिए कमजोर है। यहां एक संबंधित शोषण देखें: https://github.com/johnhenry/valid-email/issues/4 –

12
^([0-9a-zA-Z]([-\.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$ 

यह अभिव्यक्ति लिखने और जांचने में मदद करने के लिए एक शानदार उपकरण है, सुनिश्चित नहीं है कि आपके पास यह है लेकिन उम्मीद है कि यह सहायक है।

Expresso

+2

यह रेगेक्स विनाशकारी बैकट्रैकिंग को प्रेरित करने के लिए एक निश्चित अग्नि तरीका है, जैसा कि [इस अनुवर्ती प्रश्न] [http: //stackoverflow.com/q/13087755/20670)। –

+1

इसका उपयोग न करें - देखें: http://stackoverflow.com/questions/13087755/can-anyone-tell-me-why-this-c-sharp-email-validation-regular-expression-regex –

+0

'बहुत बढ़िया टूल 'विनाशकारी बैकट्रैकिंग के बारे में चेतावनी नहीं है। सुनिश्चित नहीं है कि RegexBuddy करता है, लेकिन यह मेरी पसंद का टूल है। –

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