javascript - जावास्क्रिप्ट में एक ईमेल पता कैसे सत्यापित करें?




regex validation (20)

एक समाधान जो टीएलडी के अस्तित्व की जांच नहीं करता है अधूरा है।

इस प्रश्न के लगभग सभी उत्तरों ईमेल पते को सत्यापित करने के लिए रेगेक्स का उपयोग करने का सुझाव देते हैं। मुझे लगता है कि रेगेक्स एक प्राथमिक सत्यापन के लिए केवल अच्छा है। ऐसा लगता है कि ईमेल पते की जांच सत्यापन वास्तव में दो अलग-अलग समस्याएं हैं:

1- ईमेल प्रारूप का सत्यापन: यह सुनिश्चित करना कि ईमेल आरएफसी 5322 में ईमेल के स्वरूप और पैटर्न का अनुपालन करता है और यदि टीएलडी वास्तव में मौजूद है। सभी वैध टीएलडी की एक सूची here पाई जा सकती here

उदाहरण के लिए, हालांकि पता [email protected]रेगेक्स पास करेगा, यह वैध ईमेल cccनहीं है , क्योंकि आईएएनए द्वारा शीर्ष-स्तरीय डोमेन नहीं है।

2- यह सुनिश्चित करना कि ईमेल वास्तव में मौजूद है: ऐसा करने के लिए, उपयोगकर्ताओं को एक ईमेल भेजने का एकमात्र विकल्प है ।

जावास्क्रिप्ट में एक ईमेल पता कैसे सत्यापित किया जा सकता है?


आधुनिक ब्राउज़रों में आप शुद्ध जावास्क्रिप्ट और DOM साथ @ सुशील के उत्तर के शीर्ष पर बना सकते हैं:

function validateEmail(value) {
  var input = document.createElement('input');

  input.type = 'email';
  input.required = true;
  input.value = value;

  return typeof input.checkValidity === 'function' ? input.checkValidity() : /\[email protected]\S+\.\S+/.test(value);
}

मैंने fiddle http://jsfiddle.net/boldewyn/2b6d5/ में एक उदाहरण दिया है। स्क्वायरल के उत्तर से फीचर डिटेक्शन और नंगे हड्डियों के सत्यापन के साथ संयुक्त, यह आपको नियमित अभिव्यक्ति नरसंहार से मुक्त करता है और पुराने ब्राउज़र पर बोर्क नहीं करता है।


इनपुट इनपुट स्ट्रिंग को सत्यापित करने के लिए आपको नियमित अभिव्यक्तियों का उपयोग नहीं करना चाहिए ताकि यह जांच सके कि यह ईमेल है या नहीं। यह बहुत जटिल है और सभी मामलों को कवर नहीं करेगा।

अब जब आप केवल 9 0% मामलों को कवर कर सकते हैं, तो कुछ लिखें:

function isPossiblyValidEmail(txt) {
   return txt.length > 5 && txt.indexOf('@')>0;
}

आप इसे परिष्कृत कर सकते हैं। उदाहरण के लिए, 'aaa @' मान्य है। लेकिन कुल मिलाकर आप मिलते हैं। और दूर नहीं ले जायें ... एक साधारण 90% समाधान 100% समाधान से बेहतर है जो काम नहीं करता है।

दुनिया को सरल कोड की जरूरत है ...


ईमेल को प्रमाणित करने के लिए नियमित अभिव्यक्ति का उपयोग करने का निर्णय लेने वाले दूसरे को समझने के लिए आपको कुछ समझना है: शायद यह एक अच्छा विचार नहीं है । एक बार जब आप इसके साथ बात कर लेंगे, वहां कई कार्यान्वयन हैं जो आपको आधा रास्ते मिल सकते हैं, यह आलेख उन्हें अच्छी तरह से बताता है।

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


जावास्क्रिप्ट एक नियमित अभिव्यक्ति से मेल खा सकता है:

emailAddress.match( / some_regex /);

ईमेल के लिए RFC22 नियमित अभिव्यक्ति यहां दी गई है:

^((?>[a-zA-Z\d!#$%&'*+\-/=?^_`{|}~]+\x20*|"((?=[\x01-\x7f])[^"\\]|\\[\x01-\x7f])*
"\x20*)*(?<angle><))?((?!\.)(?>\.?[a-zA-Z\d!#$%&'*+\-/=?^_`{|}~]+)+|"((?=[\x01-\x
7f])[^"\\]|\\[\x01-\x7f])*")@(((?!-)[a-zA-Z\d\-]+(?<!-)\.)+[a-zA-Z]{2,}|\[(((?(?<
!\[)\.)(25[0-5]|2[0-4]\d|[01]?\d?\d)){4}|[a-zA-Z\d\-]*[a-zA-Z\d]:((?=[\x01-\x7f])
[^\\\[\]]|\\[\x01-\x7f])+)\])(?(angle)>)$

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

<input type="email"/>

सत्यापन के लिए एक समारोह लिखने की कोई जरूरत नहीं है।


मैं वास्तव में इस समस्या को हल करने की उम्मीद कर रहा हूं। तो मैंने ऊपर ईमेल सत्यापन नियमित अभिव्यक्ति संशोधित की

विकिपीडिया ईमेल पते में उदाहरणों को पारित करने के लिए।

और आप here परिणाम देख सकते हैं।


मैंने उन लोगों के लिए जेमोन के जवाब में थोड़ा बदलाव किया है जो वास्तव में सरल सत्यापन चाहते हैं:

[email protected]

नियमित अभिव्यक्ति:

/\[email protected]\S+\.\S+/

उदाहरण जावास्क्रिप्ट फ़ंक्शन:

function validateEmail(email) 
{
    var re = /\[email protected]\S+\.\S+/;
    return re.test(email);
}

यह http://codesnippets.joyent.com/posts/show/1917 से चोरी हो गया था

email = $('email');
filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
if (filter.test(email.value)) {
  // Yay! valid
  return true;
}
else
  {return false;}

यह करो:

[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?

क्यूं कर? यह आरएफसी 2822 पर आधारित है , जो एक मानक सभी ईमेल पते का पालन करना चाहिए।

अक्सर डेटाबेस में ईमेल पते संग्रहीत करते समय मैं उन्हें लोअरकेस बना देता हूं और, व्यावहारिक रूप से, रेगेक्स आमतौर पर केस असंवेदनशील चिह्नित किया जा सकता है। उन मामलों में यह थोड़ा छोटा है:

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?

जावास्क्रिप्ट में इसका उपयोग करने का एक उदाहरण यहां दिया गया है (अंत में मामले असंवेदनशील ध्वज के साथ)।

var emailCheck=/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;
console.log( emailCheck.test('[email protected]') );

नोट :
तकनीकी रूप से कुछ ईमेल उद्धरण के अंदर भागने वाले पात्रों के साथ @ प्रतीक से पहले अनुभाग में उद्धरण शामिल कर सकते हैं (इसलिए आपका ईमेल उपयोगकर्ता अप्रिय हो सकता है और इसमें "..." और "..." जैसे सामान शामिल हैं, जब तक यह उद्धरण में लिखा गया हो)। कोई भी यह कभी नहीं करता है! यह अप्रचलित है। लेकिन, यह वास्तविक आरएफसी 2822 मानक में शामिल है, और यहां छोड़ा गया है।

अधिक जानकारी: http://www.regular-expressions.info/email.html


वाह, यहां बहुत सारी जटिलताएं हैं। यदि आप बस इतना करना चाहते हैं कि सबसे स्पष्ट वाक्यविन्यास त्रुटियों को पकड़ें, तो मैं ऐसा कुछ करूंगा:

\[email protected]\S+

यह आमतौर पर सबसे स्पष्ट त्रुटियों को पकड़ता है जो उपयोगकर्ता बनाता है और आश्वासन देता है कि फ़ॉर्म अधिकतर सही है, जो जावास्क्रिप्ट सत्यापन के बारे में है।


सभी ईमेल पतों में 'एट' (यानी @) प्रतीक होता है। आवश्यक शर्त का परीक्षण करें:

email.indexOf("@") > 0

कुछ भी जटिल से परेशान मत करो। यहां तक ​​कि यदि आप पूरी तरह से यह निर्धारित कर सकते हैं कि कोई ईमेल आरएफसी-वाक्य रचनात्मक रूप से मान्य है, तो यह आपको नहीं बताएगा कि यह उस व्यक्ति से संबंधित है जो इसे प्रदान करता है। यही वास्तव में मायने रखता है।

इसका परीक्षण करने के लिए, एक सत्यापन संदेश भेजें।


विकिपीडिया मानक मेल वाक्यविन्यास:

https://en.wikipedia.org/wiki/Email_address#Examples https://fr.wikipedia.org/wiki/Adresse_%C3%A9lectronique#Syntaxe_exacte

function validMail(mail)
{
    return /^(([^<>()\[\]\.,;:\[email protected]\"]+(\.[^<>()\[\]\.,;:\[email protected]\"]+)*)|(\".+\"))@(([^<>()\.,;\[email protected]\"]+\.{0,1})+([^<>()\.,;:\[email protected]\"]{2,}|[\d\.]+))$/.test(mail);
}

// VALID MAILS

validMail('[email protected]') // Return true
validMail('[email protected]') // Return true
validMail('[email protected]') // Return true
validMail('[email protected]') // Return true
validMail('[email protected]') // Return true
validMail('user+mailbox/[email protected]') // Return true
validMail('"very.(),:;<>[]\".VERY.\"[email protected]\\ \"very\".unusual"@strange.example.com') // Return true
validMail('!#$%&\'*+-/=?^_`.{|}[email protected]') // Return true
validMail('"()<>[]:,;@\\\"!#$%&\'-/=?^_`{}| ~.a"@example.org') // Return true
validMail('"[email protected]"@example.com') // Return true
validMail('"Fred Bloggs"@example.com') // Return true
validMail('"Joe.\\Blow"@example.com') // Return true
validMail('Loïc.Accentué@voilà.fr') // Return true
validMail('" "@example.org') // Return true
validMail('[email protected][IPv6:2001:DB8::1]') // Return true

// INVALID MAILS

validMail('Abc.example.com') // Return false
validMail('[email protected]@[email protected]') // Return false
validMail('a"b(c)d,e:f;g<h>i[j\k][email protected]') // Return false
validMail('just"not"[email protected]') // Return false
validMail('this is"not\[email protected]') // Return false
validMail('this\ still\"not\\[email protected]') // Return false
validMail('[email protected]') // Return false
validMail('[email protected]') // Return false

यह परीक्षण दिखाएं: https://regex101.com/r/LHJ9gU/1


अपने सत्यापनकर्ता फ़ंक्शन के अंदर इस कोड का उपयोग करें:

var emailID = document.forms["formName"]["form element id"].value;
atpos = emailID.indexOf("@");
dotpos = emailID.lastIndexOf(".");
if (atpos < 1 || ( dotpos - atpos < 2 ))
{
    alert("Please enter correct email ID")
    return false;
}

अन्यथा आप jQuery उपयोग कर सकते हैं । नियमों के अंदर परिभाषित करें:

eMailId: {
    required: true,
    email: true
}

सर्वश्रेष्ठ रेगेक्स जो आरएफसी 5322 के साथ पुष्टि करता है

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])+


एएसपी.नेट एमवीसी के भीतर माइक्रोसॉफ्ट द्वारा प्रदान की गई नियमित अभिव्यक्ति है

/^[\w-]+(\.[\w-]+)*@([a-z0-9-]+(\.[a-z0-9-]+)*?\.[a-z]{2,6}|(\d{1,3}\.){3}\d{1,3})(:\d{4})?$/

जो मैं यहां त्रुटिपूर्ण होने पर यहां पोस्ट करता हूं - हालांकि यह हमेशा मेरी ज़रूरतों के लिए बिल्कुल सही रहा है।


गड़बड़ी के विपरीत , यहां एक जटिल समाधान है, लेकिन यह ईमेल को सही तरीके से सत्यापित करने का एक शक्तिशाली काम करता है:

function isEmail(email) { 
    return /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(email);
} 

इस तरह प्रयोग करें:

if (isEmail('[email protected]')){ console.log('This is email is valid'); }

Regex अद्यतन 2018! इसे इस्तेमाल करे

let val = '[email protected]';
if(/^[a-z0-9][a-z0-9-_\.][email protected]([a-z]|[a-z0-9]?[a-z0-9-]+[a-z0-9])\.[a-z0-9]{2,10}(?:\.[a-z]{2,10})?$/.test(val)) {
   console.log('passed');
}

टाइपस्क्रिप्ट संस्करण पूर्ण

//
export const emailValid = (val:string):boolean => /^[a-z0-9][a-z0-9-_\.][email protected]([a-z]|[a-z0-9]?[a-z0-9-]+[a-z0-9])\.[a-z0-9]{2,10}(?:\.[a-z]{2,10})?$/.test(val);

अधिक जानकारी https://git.io/vhEfc


ईमेल पते मान्य करने के लिए नियमित अभिव्यक्तियों का उपयोग करने के बारे में यहां एक बहुत अच्छी चर्चा है; " http://fightingforalostcause.net/misc/2006/compare-email-regex.php "

संदर्भ शीर्ष उद्देश्यों के लिए वर्तमान शीर्ष अभिव्यक्ति यहां है, जो जावास्क्रिप्ट संगत है:

/^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i

एक ईमेल सत्यापनकर्ता 100% सही प्राप्त करना मुश्किल है। इसे सही करने का एकमात्र असली तरीका खाते में एक परीक्षण ईमेल भेजना होगा। उस ने कहा, कुछ बुनियादी जांच हैं जो यह सुनिश्चित करने में मदद कर सकती हैं कि आपको कुछ उचित मिल रहा है।

कुछ चीजों को सुधारने के लिए:

नए के बजाय RegExp, बस regexpइस तरह लिखने का प्रयास करें:

if (reg.test(/@/))

दूसरा, यह सुनिश्चित करने के लिए जांचें कि एक अवधि @साइन के बाद आता है , और सुनिश्चित करें कि @एस और अवधि के बीच वर्ण हैं ।






email-validation