PHP में किसी ईमेल को कैसे सत्यापित करें?




regex validation (4)

मैं इनपुट मान को कैसे मान्य कर सकता हूं php5 का उपयोग कर एक मान्य ईमेल पता है। अब मैं इस कोड का उपयोग कर रहा हूँ

function isValidEmail($email){ 
     $pattern = "^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$"; 

     if (eregi($pattern, $email)){ 
        return true; 
     } 
     else { 
        return false; 
     }    
} 

लेकिन यह बहिष्कृत त्रुटि दिखाता है। मैं इस समस्या को कैसे हल कर सकता हूं। क्रिप्या मेरि सहायता करे।


आप filter_var() फ़ंक्शन का उपयोग कर सकते हैं, जो आपको बहुत आसान सत्यापन और स्वच्छता विकल्प प्रदान करता है।

filter_var($email, FILTER_VALIDATE_EMAIL)

यदि आप अपने कोड पर निर्भर कोड को बदलना नहीं चाहते हैं, तो बस करें:

function isValidEmail($email){ 
    return filter_var($email, FILTER_VALIDATE_EMAIL) !== false;
}

नोट : अन्य उपयोगों के लिए (जहां आपको रेगेक्स की आवश्यकता है), बहिष्कृत ereg फ़ंक्शन परिवार (POSIX रेगेक्स फ़ंक्शंस) को preg परिवार ( पीसीआरई रेगेक्स फ़ंक्शंस ) द्वारा प्रतिस्थापित किया जाना चाहिए। मतभेदों की एक छोटी सी मात्रा है, मैनुअल पढ़ने के लिए पर्याप्त होना चाहिए।

अद्यतन 1 : जैसा कि @binaryLV द्वारा इंगित किया गया है:

PHP 5.3.3 और 5.2.14 में FILTER_VALIDATE_EMAIL से संबंधित एक bug था, जिसके परिणामस्वरूप बड़े मानों को सत्यापित करते समय segfault में परिणाम हुआ। इसके लिए सरल और सुरक्षित वर्कअराउंड filter_var() से पहले strlen() का उपयोग कर रहा है। मुझे 5.3.4 फ़ाइनल के बारे में निश्चित नहीं है, लेकिन यह लिखा गया है कि कुछ 5.3.4-स्नैपशॉट संस्करण भी प्रभावित हुए थे।

यह बग पहले ही तय कर दिया गया है।

अद्यतन 2 : यह विधि निश्चित रूप से एक वैध ईमेल पते के रूप में [email protected] को मान्य [email protected] , क्योंकि वास्तव में यह एक वैध ईमेल पता है। लेकिन इंटरनेट पर ज्यादातर समय, आप यह भी चाहते हैं कि ईमेल पता एक टीएलडी हो: [email protected] । जैसा कि इस ब्लॉग पोस्ट ( @Istiaque अहमद द्वारा पोस्ट किया गया लिंक) में सुझाया गया है, आप एक regex के साथ filter_var() को बढ़ा सकते हैं जो डोमेन भाग में किसी बिंदु के अस्तित्व की जांच करेगा (हालांकि वैध TLD के लिए जांच नहीं करेगा):

function isValidEmail($email) {
    return filter_var($email, FILTER_VALIDATE_EMAIL) 
        && preg_match('/@.+\./', $email);
}

जैसा कि @Eliseo Ocampos ने इंगित किया है, यह समस्या केवल PHP 5.3 से पहले मौजूद है, उस संस्करण में उन्होंने रेगेक्स बदल दिया और अब यह जांच करता है, इसलिए आपको यह नहीं करना है।


ईमेल को सत्यापित करने के लिए regex और filter_var() समाधान से दूर रहें। यह उत्तर देखें: https://.com/a/42037557/953833


यह पुरानी पोस्ट है लेकिन मैं अपना समाधान साझा करूंगा क्योंकि कोई भी यहां पहले एक समस्या का उल्लेख नहीं करता है।

नए ईमेल पते में यूटीएफ -8 अक्षरों या विशेष डोमेन नाम जैसे .news , .news इत्यादि शामिल हो सकते हैं।

इसके अलावा मुझे लगता है कि कुछ ईमेल पता सिरिलिक पर हो सकते हैं और सभी मामलों में मानक regex या filter_var() विफल हो जाएंगे।

यही कारण है कि मैंने इसके लिए एक समाधान किया:

function valid_email($email) 
{
    if(is_array($email) || is_numeric($email) || is_bool($email) || is_float($email) || is_file($email) || is_dir($email) || is_int($email))
        return false;
    else
    {
        $email=trim(strtolower($email));
        if(filter_var($email, FILTER_VALIDATE_EMAIL)!==false) return $email;
        else
        {
            $pattern = '/^(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){255,})(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){65,}@)(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22))(?:\\.(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-+[a-z0-9]+)*\\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-+[a-z0-9]+)*)|(?:\\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\\]))$/iD';
            return (preg_match($pattern, $email) === 1) ? $email : false;
        }
    }
}

यह फ़ंक्शन सभी मामलों और ईमेल प्रारूपों के लिए पूरी तरह से काम करता है।


http://www.php.net/manual/en/function.ereg.php पर नोट्स देखें:

Note:

PHP 5.3.0 के रूप में, regex एक्सटेंशन को PCRE पक्ष में बहिष्कृत किया गया है। इस फ़ंक्शन को कॉल करने से E_DEPRECATED नोटिस जारी होगा। पीसीआरई में कनवर्ट करने में मदद के लिए मतभेदों की सूची देखें।

Note:

preg_match() , जो पर्ल-संगत नियमित अभिव्यक्ति वाक्यविन्यास का उपयोग करता है, अक्सर ereg () के लिए एक तेज़ विकल्प होता है।







email-validation