2010-08-31 15 views
25

लिए पीएचपी सबसे अच्छा ईमेल preg का उपयोग कर सत्यापन, नहींएरेग क्योंकि यह पदावनत है/हटाया है क्या।पीएचपी ईमेल सत्यापन

मैं (यह अधिकतम सुरक्षा की तरह नहीं है) करता है, तो वेबसाइट मौजूद है की जाँच करने की जरूरत नहीं है।

मुझे ईरे के साथ कई तरीके मिले हैं लेकिन वे (जाहिर है) अच्छे अभ्यास नहीं हैं।

उत्तर

78

मैं सुझाव है कि आप FILTER_VALIDATE_EMAIL फिल्टर का उपयोग करें:

if (filter_var($email, FILTER_VALIDATE_EMAIL)) { 
    //valid 
} 

तुम भी सीधे its regular expression उपयोग कर सकते हैं:

"/^(?!(?:(?:\\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" 

लेकिन उस मामले में, एक बग नियमित अभिव्यक्ति में पाया जाता है, तो आप ' PHP को अपडेट करने के बजाय आपको अपने प्रोग्राम को अपडेट करना होगा।

+1

ध्यान रखें कि एक ई-मेल भी इन वर्ण हो सकते हैं: ' '/ *'। तो यह सत्यापन इसे डीबी सुरक्षित नहीं बनाता है। –

+0

filter_var() मेरे लिए नया है। क्या FILTER_VALIDATE_EMAIL अच्छा है? स्रोत कोड संदर्भ के लिए – Marwelln

+0

+1। महान –

3

जब तक आप very very long regular expressions का उपयोग नहीं करना चाहते हैं तो आप मान्य ईमेल पते में भाग लेंगे जो कवर नहीं हैं (यूनिकोड सोचें)। नकली ईमेल पते भी वैध के रूप में पास होंगे, तो अगर आप [email protected] लिख सकते हैं और इससे दूर हो सकते हैं तो सत्यापन करने का क्या मतलब है?

ईमेल पते को सत्यापित करने का सबसे अच्छा तरीका क्लिक करने के लिए एक लिंक के साथ एक पुष्टिकरण ईमेल भेजना है। यह केवल तभी काम करेगा जब ईमेल पता मान्य है: आसान, और regex का उपयोग करने की आवश्यकता नहीं है।

+0

जैसा कि मैंने कहा था, यह अधिकतम सुरक्षा –

+4

की तरह नहीं है एक उचित डेवलपर हमेशा "स्ट्रिंग" को ईमेल भेजने का प्रयास करने से पहले वैधता के लिए दिए गए एड्रेस की जांच करेगा। तो यह एक तर्क नहीं है। लेकिन डौबल-ऑप्ट-इन वैसे भी किया जाना चाहिए - जो सवाल नहीं था। –

+0

@ जेन .: तो, अगर मेरा ईमेल àèìòù@mydomain.com है और आपकी प्रीपेप्टिव चेक मुझे आपकी साइट पर पंजीकरण करने से रोकती है? बस एक पुष्टिकरण ईमेल भेजें और आप सेट हैं, वैध ईमेल पते को ब्लॉक करने से पहले वैधता की जांच करने और जोखिम लेने की आवश्यकता नहीं है। – nico

0
function check_email($check) { 
$expression = "/^[a-zA-Z0-9._-][email protected][a-zA-Z0-9._-]+\.([a-zA-Z]{2,4})$/"; 
if (preg_match($expression, $check)) { 
    return true; 
} else { 
    return false; 
} 
} 

यह अगर() उदाहरण के नीचे के रूप में हालत में कॉल:

if(!check_email($_REQUEST['ContactEmail'])){ 
    $register_error ="Enter the correct email address!<br />"; 
    $reg_error=1; 
} 
+0

क्या कोई मुझे बता सकता है कि इस कोड में समस्या क्या है, मतदान करने वाले व्यक्ति को बीसीजे। यह ठीक काम कर रहा है। –

+0

यह मुझे नहीं था कि नीचे मतदान किया गया .... लेकिन ई-मेल पते को सही ढंग से फ़िल्टर करने के लिए सही नहीं है, सही और पूर्ण रेगेक्स यहां मिलेगा: http://www.ex-parrot.com/~ पीडीडब्ल्यू/मेल-आरएफसी 822-पता.html दूसरा, FILTER_VALIDATE_EMAIL में निर्मित PHP का उपयोग करके ई-मेल पता फ़िल्टर करने का सही/सर्वोत्तम तरीका होगा – twigg

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