क्या जावास्क्रिप्ट में एक ईमेल पते को मान्य करने के लिए एक नियमित अभिव्यक्ति है?
@
, ;com
आदि) हैं और उपयोगकर्ता को यदि वे चाहें तो उन्हें सही करने दें (और जो भी वे मुझे भेजते हैं उसे स्वीकार करें)
क्या जावास्क्रिप्ट में एक ईमेल पते को मान्य करने के लिए एक नियमित अभिव्यक्ति है?
@
, ;com
आदि) हैं और उपयोगकर्ता को यदि वे चाहें तो उन्हें सही करने दें (और जो भी वे मुझे भेजते हैं उसे स्वीकार करें)
जवाबों:
नियमित अभिव्यक्तियों का उपयोग करना शायद सबसे अच्छा तरीका है। आप यहाँ परीक्षणों का एक गुच्छा ( क्रोमियम से लिया हुआ ) देख सकते हैं
function validateEmail(email) {
const re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return re.test(String(email).toLowerCase());
}
यहाँ नियमित एक्सर्साइज़ का उदाहरण दिया गया है जो यूनिकोड स्वीकार करता है:
const re = /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;
लेकिन ध्यान रखें कि किसी को केवल जावास्क्रिप्ट सत्यापन पर भरोसा नहीं करना चाहिए। जावास्क्रिप्ट को आसानी से निष्क्रिय किया जा सकता है। यह सर्वर साइड पर भी मान्य होना चाहिए।
यहां उपरोक्त कार्रवाई का एक उदाहरण दिया गया है:
function validateEmail(email) {
const re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return re.test(email);
}
function validate() {
const $result = $("#result");
const email = $("#email").val();
$result.text("");
if (validateEmail(email)) {
$result.text(email + " is valid :)");
$result.css("color", "green");
} else {
$result.text(email + " is not valid :(");
$result.css("color", "red");
}
return false;
}
$("#validate").on("click", validate);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
<p>Enter an email address:</p>
<input id='email'>
<button type='submit' id='validate'>Validate!</button>
</form>
<h2 id='result'></h2>
%2@gmail.com, "%2"@gmail.com, "a..b"@gmail.com, "a_b"@gmail.com, _@gmail.com, 1@gmail.com , 1_example@something.gmail.com
सभी मान्य हैं, लेकिन Gmail कभी भी इनमें से किसी भी ईमेल पते की अनुमति नहीं देगा। आपको यह ईमेल पते को स्वीकार करके और उस ईमेल पते पर एक ईमेल संदेश भेजकर करना चाहिए, जिसकी कोड / लिंक के साथ उपयोगकर्ता को वैधता की पुष्टि करने के लिए दौरा करना होगा।
मैंने उन लोगों के लिए जेमोन के उत्तर को थोड़ा संशोधित किया है जो वास्तव में सरल सत्यापन चाहते हैं:
anystring@anystring.anystring
नियमित अभिव्यक्ति:
/\S+@\S+\.\S+/
उदाहरण जावास्क्रिप्ट समारोह:
function validateEmail(email)
{
var re = /\S+@\S+\.\S+/;
return re.test(email);
}
console.log(validateEmail('anystring@anystring.anystring'));
name@again@example.com
। जावास्क्रिप्ट कंसोल में अपनी लाइन चिपकाने का प्रयास करें। मेरा मानना है कि आपका इरादा केवल पूरे पाठ से मेल खाना था, जिसके लिए पाठ '^' की शुरुआत और पाठ '$' ऑपरेटरों के अंत की आवश्यकता होगी। मैं जो उपयोग कर रहा हूं वह है/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test('name@again@example.com')
"very.unusual.@.unusual.com"@example.com
एक मान्य ईमेल पता है। /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test('"very.unusual.@.unusual.com"@example.com') // false
। उफ़।
@@@.@
? : D
पूर्णता के लिए, यहां आपके पास एक और आरएफसी 2822 कंप्लीट रेगेक्स है
आधिकारिक मानक को RFC 2822 के रूप में जाना जाता है । यह सिंटैक्स का वर्णन करता है कि मान्य ईमेल पते का पालन करना चाहिए। आप कर सकते हैं ( लेकिन आप नहीं करना चाहिए - पर पढ़ें ) इस नियमित अभिव्यक्ति के साथ इसे लागू:
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
(...) हम RFC 2822 का अधिक व्यावहारिक कार्यान्वयन प्राप्त करते हैं यदि हम दोहरे उद्धरण और वर्ग कोष्ठक का उपयोग करके वाक्यविन्यास को छोड़ देते हैं। यह आज भी वास्तविक उपयोग में सभी ईमेल पतों के 99.99% से मेल खाएगा।
[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
एक और बदलाव जो आप कर सकते हैं, वह है किसी भी दो-अक्षर वाले देश कोड शीर्ष स्तर के डोमेन, और केवल विशिष्ट सामान्य शीर्ष स्तर के डोमेन की अनुमति देना। यह रेगेक्स डमी ईमेल पतों को पसंद करता है
asdf@adsf.adsf
। आप इसे अद्यतन करने के रूप में नए शीर्ष स्तर डोमेन जोड़ रहे हैं की आवश्यकता होगी ।
[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum)\b
इसलिए जब आधिकारिक मानकों का पालन किया जाता है, तब भी व्यापार बंद होना चाहिए। ऑनलाइन लाइब्रेरी या चर्चा फ़ोरम से नियमित अभिव्यक्तियों को नेत्रहीन कॉपी न करें। हमेशा उन्हें अपने डेटा पर और अपने स्वयं के अनुप्रयोगों के साथ परीक्षण करें।
जोर मेरा
{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_
{{|} ~ -] +) * @ (:?: [a-z0-9] (?:? [a-z0-9 -] * [[a-z0-9])?!) + [a-z0-9] [a-z0-9 -] * * [a-z0-9] /
वाह, यहाँ जटिलता बहुत हैं। यदि आप सभी करना चाहते हैं तो बस सबसे स्पष्ट वाक्यविन्यास त्रुटियों को पकड़ना है, मैं कुछ इस तरह से करूंगा:
^\S+@\S+$
यह आमतौर पर सबसे स्पष्ट त्रुटियों को पकड़ता है जो उपयोगकर्ता बनाता है और आश्वासन देता है कि फॉर्म ज्यादातर सही है, जो कि जावास्क्रिप्ट सत्यापन के बारे में है।
.+@.+
/\S+@\S+/.test("áéíóúý@ÁÉÍÓÚÝð")
true
ईमेल को मान्य करने के लिए एक नियमित अभिव्यक्ति का उपयोग करने का निर्णय लेने के लिए आपको कुछ समझना होगा: यह शायद एक अच्छा विचार नहीं है । एक बार जब आप इस बारे में बात कर लेते हैं, तो कई कार्यान्वयन वहां से होते हैं जो आपको आधे रास्ते तक पहुंचा सकते हैं, यह लेख उन्हें अच्छी तरह से बताता है।
संक्षेप में, हालांकि, पूरी तरह से होने का एकमात्र तरीका, सकारात्मक रूप से सुनिश्चित करें कि उपयोगकर्ता ने जो दर्ज किया है वह वास्तव में एक ईमेल है वास्तव में एक ईमेल भेजें और देखें कि क्या होता है। इसके अलावा यह सब सिर्फ अनुमान है।
name_part@domain_part
और व्यावहारिक रूप से कुछ भी, सहित एक @
, name_part में वैध है; यह पता foo@bar@machine.subdomain.example.museum
कानूनी है, हालांकि इसे छोड़ दिया जाना चाहिए foo\@bar@machine....
। एक बार जब ईमेल डोमेन पर पहुँच जाता है जैसे 'example.com' कि डोमेन "स्थानीय" मेल को रूट कर सकता है तो "अजीब" उपयोगकर्ता नाम और होस्टनाम मौजूद हो सकते हैं।
.us
डोमेन है या क्योंकि मैंने +
बाईं ओर एक का उपयोग किया है @
- कई स्थानों पर इन प्रबल त्रुटियां ठीक कर लें, लेकिन स्थानीय-भाग (@ के बाएं) हो सकता है कुछ भी डोमेन मालिक चाहता है। -> "foo@bar.com"@example.com <- एक वैध ईमेल पता है।
HTML5 में ही ईमेल सत्यापन है। यदि आपका ब्राउज़र HTML5 का समर्थन करता है तो आप निम्न कोड का उपयोग कर सकते हैं।
<form><input type="email" placeholder="me@example.com" required>
<input type="submit">
</form>
jsFiddle लिंक
से एचटीएमएल 5 कल्पना :
एक वैध ई-मेल पता एक स्ट्रिंग है जो
email = 1*( atext / "." ) "@" label *( "." label ) label = let-dig [ [ ldh-str ] let-dig ] ; limited to a length of 63 characters by RFC 1034 section 3.5 atext = < as defined in RFC 5322 section 3.2.3 > let-dig = < as defined in RFC 1034 section 3.5 > ldh-str = < as defined in RFC 1034 section 3.5 >
यह आवश्यकता RFC 5322 का एक विलक्षण उल्लंघन है, जो ई-मेल पते के लिए एक वाक्यविन्यास को परिभाषित करता है जो एक साथ बहुत सख्त है ("@" चरित्र से पहले), बहुत अस्पष्ट ("@" चरित्र के बाद), और बहुत ही शिथिल (अनुमति देने वाले) , व्हाट्सएप पात्र, और अधिकांश उपयोगकर्ताओं से अपरिचित लोगों में उद्धृत तार) यहां व्यावहारिक उपयोग के लिए।
निम्नलिखित जावास्क्रिप्ट- और पर्ल-संगत नियमित अभिव्यक्ति उपरोक्त परिभाषा का कार्यान्वयन है।
/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/
form
टैग के अंदर होना चाहिए और एक submit
इनपुट द्वारा सबमिट किया जाना चाहिए , जो हर किसी के पास करने की लक्जरी नहीं है। इसके अलावा, आप वास्तव में त्रुटि संदेश नहीं दे सकते।
user@email
, उदाहरण के लिए, PHP का filter_var
नहीं। इसके कारण समस्या हो सकती है।
मैंने इसे सबसे अच्छा समाधान पाया है:
/^[^\s@]+@[^\s@]+\.[^\s@]+$/
यह निम्नलिखित स्वरूपों की अनुमति देता है:
1. prettyandsimple@example.com 2. very.common@example.com 3. disposable.style.email.with+symbol@example.com 4. other.email-with-dash@example.com 9. # #%%&'*+-/??__ पेचीदगियाँ विजेट @@example.org 6. "() []:, @ \\\"! # $% & '* + - / =; ^ _ `{} | ~ ए "@ example.org 7. "" @ example.org (उद्धरण चिह्नों के बीच का स्थान) 8. üñ (çøðé@example.com (स्थानीय भाग में यूनिकोड वर्ण) 9. üñîçøðé@üñðçø.comé.com (डोमेन भाग में यूनिकोड वर्ण) 10. पेले @example.com (लैटिन) 11. άδεοάδειμή@παργιαμα.κοήιμή (ग्रीक) 12. 12.) @ @ 香港। (चीनी) 13. 13. Japanese @ 黒 川। </a> (जापानी) 14. чебурашка@ячик-с-апельсинами.рф (सीरिलिक)
यह स्पष्ट रूप से बहुमुखी है और सभी महत्वपूर्ण अंतरराष्ट्रीय पात्रों की अनुमति देता है, जबकि अभी भी बुनियादी कुछ भी लागू कर रहा है: कुछ भी। प्रारूप। यह रिक्त स्थान को अवरुद्ध कर देगा जो तकनीकी रूप से आरएफसी द्वारा अनुमत हैं, लेकिन वे इतने दुर्लभ हैं कि मुझे ऐसा करने में खुशी हो रही है।
@
रूप में .
(या इसके विपरीत) भूल जाते हैं । कारण हमें सर्वर-साइड पर अधिक प्रतिबंधात्मक तरीके से रहना होगा।
username@domain.com
से इस पैटर्न के साथ काम नहीं करता है
a@b@c@d.x.y.@.z
तो हो सकता है कि वे बुरे समय के लायक हों? : डी
आधुनिक ब्राउज़रों में आप शुद्ध जावास्क्रिप्ट और 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() : /\S+@\S+\.\S+/.test(value);
}
मैंने एक उदाहरण fiddle http://jsfiddle.net/boldewyn/2b6d5/ पर एक साथ रखा है । स्क्वीर्टल के उत्तर से फीचर डिटेक्शन और नंगे-हड्डियों के सत्यापन के साथ संयुक्त , यह आपको नियमित अभिव्यक्ति नरसंहार से मुक्त करता है और पुराने ब्राउज़रों पर बोर नहीं करता है।
.@a
मान्य है true
।
यह सही RFC822 संस्करण है।
function checkEmail(emailAddress) {
var sQtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]';
var sDtext = '[^\\x0d\\x5b-\\x5d\\x80-\\xff]';
var sAtom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+';
var sQuotedPair = '\\x5c[\\x00-\\x7f]';
var sDomainLiteral = '\\x5b(' + sDtext + '|' + sQuotedPair + ')*\\x5d';
var sQuotedString = '\\x22(' + sQtext + '|' + sQuotedPair + ')*\\x22';
var sDomain_ref = sAtom;
var sSubDomain = '(' + sDomain_ref + '|' + sDomainLiteral + ')';
var sWord = '(' + sAtom + '|' + sQuotedString + ')';
var sDomain = sSubDomain + '(\\x2e' + sSubDomain + ')*';
var sLocalPart = sWord + '(\\x2e' + sWord + ')*';
var sAddrSpec = sLocalPart + '\\x40' + sDomain; // complete RFC822 email address spec
var sValidEmail = '^' + sAddrSpec + '$'; // as whole string
var reValidEmail = new RegExp(sValidEmail);
return reValidEmail.test(emailAddress);
}
जावास्क्रिप्ट एक नियमित अभिव्यक्ति से मेल खा सकती है:
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)>)$
(?>
बैकट्रैकिंग को रोकना और (?<angle><)…(?(angle)>)
लंबा प्रदान करने से बचना शामिल है |
।
सभी ईमेल पतों में एक 'एट' (यानी @) प्रतीक होता है। आवश्यक शर्त का परीक्षण करें:
email.indexOf("@") > 0
कुछ और अधिक जटिल के साथ परेशान मत करो। यहां तक कि अगर आप पूरी तरह से निर्धारित कर सकते हैं कि क्या कोई ईमेल RFC-syntactically मान्य है, तो आपको यह नहीं बताएगा कि यह उस व्यक्ति का है जो इसे आपूर्ति करता है। यही वास्तव में मायने रखता है।
परीक्षण करने के लिए, एक सत्यापन संदेश भेजें।
RFC के अनुपालन में ईमेल पते का सही सत्यापन एक ऐसी चीज नहीं है जिसे एक-लाइनर नियमित अभिव्यक्ति के साथ प्राप्त किया जा सकता है। PHP में मुझे मिला सबसे अच्छा समाधान वाला एक लेख एक वैध ईमेल पता क्या है? । जाहिर है, इसे जावा में पोर्ट किया गया है। मुझे लगता है कि फ़ंक्शन को पोर्ट करने और जावास्क्रिप्ट में उपयोग करने के लिए बहुत जटिल है। जावास्क्रिप्ट / नोड.जेएस पोर्ट: https://www.npmjs.com/package/email-addresses ।
एक अच्छा अभ्यास क्लाइंट पर अपने डेटा को मान्य करना है, लेकिन सर्वर पर सत्यापन को दोबारा जांचें। इसे ध्यान में रखते हुए, आप बस यह जांच सकते हैं कि क्या एक स्ट्रिंग क्लाइंट पर एक वैध ईमेल पते की तरह दिखता है और सर्वर पर सख्त जांच करता है।
यहां जावास्क्रिप्ट फ़ंक्शन मैं यह जांचने के लिए उपयोग करता हूं कि क्या एक स्ट्रिंग एक वैध मेल पते की तरह दिखता है:
function looksLikeMail(str) {
var lastAtPos = str.lastIndexOf('@');
var lastDotPos = str.lastIndexOf('.');
return (lastAtPos < lastDotPos && lastAtPos > 0 && str.indexOf('@@') == -1 && lastDotPos > 2 && (str.length - lastDotPos) > 2);
}
स्पष्टीकरण:
lastAtPos < lastDotPos
: सर्वर सर्वर नाम (जहां तक मुझे पता है) का हिस्सा नहीं हो सकता है, @
अंतिम अंतिम .
से पहले होना चाहिए @
।
lastAtPos > 0
: अंतिम से पहले कुछ (ईमेल उपयोगकर्ता नाम) होना चाहिए @
।
str.indexOf('@@') == -1
: @@
पते में कोई भी नहीं होना चाहिए । यहां तक कि अगर @
ईमेल उपयोगकर्ता नाम के अंतिम चरित्र के रूप में प्रकट होता है, तो भी इसे उद्धृत किया "
जाना चाहिए @
और @
पते में अंतिम और उसके बीच होगा ।
lastDotPos > 2
: अंतिम बिंदु से पहले कम से कम तीन अक्षर होने चाहिए, उदाहरण के लिए a@b.com
।
(str.length - lastDotPos) > 2
: दो-वर्ण डोमेन बनाने के लिए अंतिम बिंदु के बाद पर्याप्त वर्ण होना चाहिए। मुझे यकीन नहीं है कि अगर कोष्ठक आवश्यक हैं।
@
ईमेल उपयोगकर्ता नाम के अंतिम चरित्र के रूप में प्रकट होता है, तो भी इसे उद्धृत किया "
जाना चाहिए ताकि पते में यह @
और आखिरी के बीच हो @
।" किस बारे में "@@"@example.com
?
यह 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;}
.museum
और .travel
डोमेन को फ़िल्टर करता है (4 के बाद चार सीमा के कारण .
)
{2,4}
केवल एक उपयोगी संकेतक है (जैसा कि "जब आप उस त्रुटि को देखते हैं, तो दूसरों के आसपास होने की संभावना है")। सबसे बुनियादी एक की कमी है +
स्थानीय हिस्से में; उपरोक्त टिप्पणी की गई सभी त्रुटियों को इंगित करने के लिए यह टिप्पणी बॉक्स बहुत छोटा है ।
return filter.test(email.value);
?
xn--clchc0ea0b2g2a9gcd
) हैं। अभी भी कोई समस्या नहीं है?
यह करो:
[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])?
क्यों? यह RFC 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])?
यहां इसका एक उदाहरण जावास्क्रिप्ट में उपयोग किया जा रहा है ( i
अंत में केस असंवेदनशील ध्वज के साथ )।
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('some.body@domain.co.uk') );
नोट :
तकनीकी रूप से कुछ ईमेल में उद्धरण के @
अंदर भागने वाले पात्रों के साथ प्रतीक से पहले अनुभाग में उद्धरण शामिल हो सकते हैं (इसलिए आपका ईमेल उपयोगकर्ता अप्रिय हो सकता है और इसमें सामान @
और "..."
जब तक यह उद्धरण में लिखा है) शामिल हो सकते हैं। हर कोई इस कभी नहीं करता है! यह अप्रचलित है। लेकिन, यह सही आरएफसी 2822 मानक में शामिल है, और यहां छोड़ दिया गया है।
अधिक जानकारी: http : //www. अनियमित-expressions.info/email.html
/i
नियमित अभिव्यक्ति के अंत में ध्वज के कारण संवेदनशील नहीं है । मैं इस तथ्य का उल्लेख करता हूं कि इसे केस-असंवेदनशील होने की जरूरत है, लेकिन मैं इसे और स्पष्ट करूंगा।
मैं वास्तव में इस समस्या को हल करने के लिए तत्पर हूं। इसलिए मैंने ऊपर ईमेल सत्यापन नियमित अभिव्यक्ति को संशोधित किया है
मूल
/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
संशोधित
/^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()\.,;\s@\"]+\.{0,1})+[^<>()\.,;:\s@\"]{2,})$/
विकिपीडिया ईमेल पते में उदाहरण पारित करने के लिए ।
और आप यहां रिजल्ट देख सकते हैं ।
john..doe@example.com
सही नहीं होना चाहिए? यह एक मान्य कोने का मामला है।
यदि यह ईमेल है तो जाँच करने के लिए आपको इनपुट स्ट्रिंग को मान्य करने के लिए नियमित अभिव्यक्तियों का उपयोग नहीं करना चाहिए। यह बहुत जटिल है और सभी मामलों को कवर नहीं करेगा।
अब चूंकि आप केवल 90% मामलों को कवर कर सकते हैं, इसलिए कुछ लिखें:
function isPossiblyValidEmail(txt) {
return txt.length > 5 && txt.indexOf('@')>0;
}
आप इसे निखार सकते हैं। उदाहरण के लिए, 'आ @' वैध है। लेकिन कुल मिलाकर आपको गेस मिलता है। और दूर मत जाओ ... एक सरल 90% समाधान 100% समाधान से बेहतर है जो काम नहीं करता है।
दुनिया को सरल कोड चाहिए ...
(.+)@(.*)
एक ही काम करता है, और कम।
यदि ईमेल पता मान्य है या HTML का उपयोग नहीं कर रहा है तो बस देखें।
<input type="email"/>
सत्यापन के लिए एक फ़ंक्शन लिखने की कोई आवश्यकता नहीं है।
ईमेल सत्यापनकर्ता का 100% सही होना कठिन है। इसे सही करने का एकमात्र वास्तविक तरीका यह होगा कि आप खाते में एक परीक्षण ईमेल भेजें। उस ने कहा, कुछ बुनियादी जांच हैं जो यह सुनिश्चित करने में मदद कर सकती हैं कि आपको कुछ उचित मिल रहा है।
सुधारने के लिए कुछ बातें:
नए के बजाय RegExp
, बस regexp
इस तरह से लिखने की कोशिश करें:
if (reg.test(/@/))
दूसरा, यह सुनिश्चित करने के लिए जांचें कि @
संकेत के बाद एक अवधि आती है , और सुनिश्चित करें कि @
एस और अवधि के बीच के अक्षर हैं ।
यह है कि नोड- validator यह कैसे करता है:
/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9\-](?!\.)){0,61}[a-zA-Z0-9]?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9\-](?!$)){0,61}[a-zA-Z0-9]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/
अपने सत्यापनकर्ता फ़ंक्शन के अंदर इस कोड का उपयोग करें:
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
}
abc@xyz
एक पूरी तरह से वैध ईमेल है जो आपके regex द्वारा नहीं पहचाना जाता है।
abc@tld
एक मान्य ईमेल पता है।
रेगेक्स अपडेट 2018! इसे इस्तेमाल करे
let val = 'email@domain.com';
if(/^[a-z0-9][a-z0-9-_\.]+@([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-_\.]+@([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
इस सवाल के लगभग सभी जवाब ईमेल पते को मान्य करने के लिए रेगेक्स का उपयोग करने का सुझाव देते हैं। मुझे लगता है कि रेगेक्स केवल अल्पविकसित सत्यापन के लिए अच्छा है। ऐसा लगता है कि ईमेल पतों की जाँच सत्यापन वास्तव में दो अलग-अलग समस्याएं हैं:
1- ईमेल प्रारूप का सत्यापन: यह सुनिश्चित करना कि यदि ईमेल RFC 5322 में ईमेल के प्रारूप और पैटर्न का अनुपालन करता है और यदि TLD वास्तव में मौजूद है। सभी वैध TLD की सूची यहां पाई जा सकती है ।
उदाहरण के लिए, हालांकि पता example@example.ccc
regex पास होगा, यह एक मान्य ईमेल ccc
नहीं है , क्योंकि IANA द्वारा शीर्ष-स्तरीय डोमेन नहीं है।
2- सुनिश्चित करना कि ईमेल वास्तव में मौजूद है: यह कर के लिए, एक ही विकल्प है उपयोगकर्ताओं को एक ईमेल भेजने के लिए ।
ईमेल पते को मान्य करने के लिए Regex
[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])+
ईमेल पतों को मान्य करने के लिए नियमित अभिव्यक्तियों का उपयोग करने के बारे में एक बहुत अच्छी चर्चा है; " ई-मेल एड्रेस की तुलना रेगुलर एक्सप्रेशंस मान्य करना "
यहाँ संदर्भ प्रयोजनों के लिए जावास्क्रिप्ट शीर्ष संगत अभिव्यक्ति दी गई है:
/^[-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
.jobs
। इसके अलावा, लाइव आईडीएन हैं (जिनमें से अधिकांश, मैं मानता हूं, केवल आपके पोस्ट के बाद .中國
जून 2010 में स्वीकृत किया गया था; लेकिन अधिकांश वर्षों से काम कर रहे हैं)।
जाहिरा तौर पर, यह बात है:
/^([\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+\.)*[\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+@((((([a-z0-9]{1}[a-z0-9\-]{0,62}[a-z0-9]{1})|[a-z])\.)+[a-z]{2,6})|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)$/i
1 अक्टूबर 10 को http://fightingforalostcause.net/misc/2006/compare-email-regex.php से लिया गया ।
लेकिन, निश्चित रूप से, यह अंतर्राष्ट्रीयकरण की अनदेखी कर रहा है।
स्क्वर्टल के विपरीत , यहां एक जटिल समाधान है, लेकिन यह ईमेल को ठीक से सत्यापित करने का एक शानदार काम करता है:
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('youremail@yourdomain.com')){ console.log('This is email is valid'); }
== true
अपने उदाहरण की आवश्यकता नहीं है ।
नियमित अभिव्यक्तियों का मेरा ज्ञान उतना अच्छा नहीं है। इसलिए मैं सामान्य सिंटैक्स को पहले एक साधारण नियमित अभिव्यक्ति के साथ जांचता हूं और बाद में अन्य कार्यों के साथ अधिक विशिष्ट विकल्पों की जांच करता हूं। यह सबसे अच्छा तकनीकी समाधान नहीं हो सकता है, लेकिन इस तरह से मैं अधिक लचीला और तेज हूं।
सबसे आम त्रुटियां जो मुझे आई हैं, वे रिक्त स्थान हैं (विशेषकर शुरुआत और अंत में) और कभी-कभी एक डबल डॉट।
function check_email(val){
if(!val.match(/\S+@\S+\.\S+/)){ // Jaymon's / Squirtle's solution
// Do something
return false;
}
if( val.indexOf(' ')!=-1 || val.indexOf('..')!=-1){
// Do something
return false;
}
return true;
}
check_email('check@thiscom'); // Returns false
check_email('check@this..com'); // Returns false
check_email(' check@this.com'); // Returns false
check_email('check@this.com'); // Returns true
<form name="validation" onSubmit="return checkbae()">
Please input a valid email address:<br />
<input type="text" size=18 name="emailcheck">
<input type="submit" value="Submit">
</form>
<script language="JavaScript1.2">
var testresults
function checkemail(){
var str = document.validation.emailcheck.value
var filter = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
if (filter.test(str))
testresults = true
else {
alert("Please input a valid email address!")
testresults = false
}
return (testresults)
}
</script>
<script>
function checkbae(){
if (document.layers || document.getElementById || document.all)
return checkemail()
else
return true
}
</script>
मैं JS में एक Rexx की तलाश में था जो सभी ईमेल एड्रेस टेस्ट मामलों को पास करता है:
email@example.com
वैध ईमेल
firstname.lastname@example.com
ईमेल में एड्रेस फील्ड में डॉट होता है
email@subdomain.example.com
ईमेल में उपडोमेन के साथ डॉट होता है
firstname+lastname@example.com
प्लस साइन को वैध चरित्र माना जाता है
email@192.0.2.123
डोमेन मान्य IP पता है
email@[192.0.2.123]
आईपी पते के चारों ओर स्क्वायर ब्रैकेट को वैध माना जाता है
“email”@example.com
ईमेल के आसपास उद्धरण मान्य माना जाता है
1234567890@example.com
पते में अंक मान्य हैं
email@domain-one.example
डोमेन नाम में डैश मान्य है
_______@example.com
एड्रेस फ़ील्ड में अंडरस्कोर मान्य है
email@example.name
.name
मान्य शीर्ष स्तर डोमेन नाम है
email@example.co.jp
शीर्ष स्तर डोमेन नाम में डॉट भी मान्य माना जाता है ( co.jp
उदाहरण के रूप में)
firstname-lastname@example.com
एड्रेस फील्ड में डैश मान्य है
ये रहा :
या रेगेक्स:
Regex = /(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@[*[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+]*/
Microsoft द्वारा ASP.NET MVC के भीतर दी गई नियमित अभिव्यक्ति है
/^[\w-]+(\.[\w-]+)*@([a-z0-9-]+(\.[a-z0-9-]+)*?\.[a-z]{2,6}|(\d{1,3}\.){3}\d{1,3})(:\d{4})?$/
यहाँ मैं पोस्ट करता हूँ अगर यह त्रुटिपूर्ण है - हालाँकि यह हमेशा मेरी आवश्यकताओं के लिए एकदम सही है।