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


4370

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



60
कृपया यह अधिकार प्राप्त करें, बहुत सी वेबसाइट को "firstName@secondName.name" का मेरा ईमेल पता पसंद नहीं आया, सभी शीर्ष स्तर के डोमेन इसे 2 या 3 अक्षर समाप्त नहीं करते हैं।
इयान रिंगरोज

41
ई-मेल के लिए रेगेक्स चेक के उपयोग के लिए कोई समर्थन मैं 100% के खिलाफ हूं। मुझे बताया जा रहा है कि "foo+bar@gmail.com" का मेरा ई-मेल पता अमान्य है। सबसे अच्छा विकल्प यह है कि उपयोगकर्ता को दो बार अपना ई-मेल टाइप करने के लिए कहें और यदि आप एक regex चेकर का उपयोग करते हैं, तो उपयोगकर्ता को बताएं कि उनका ई-मेल पता मान्य नहीं दिखता है और पूछें कि क्या वे इसे टाइप कर रहे हैं? सही। यहां तक ​​कि यहां तक ​​कि इंगित करें कि WHAT ने regexp चेक में क्या नहीं देखा, लेकिन उन्हें फॉर्म सबमिट करने से न रोकें।
साउंडफिको 4

17
@ Soundfx4: यह उत्तर होना चाहिए, और इस तरह के रूप में स्वीकार किया जाना चाहिए। एक पते की शुद्धता के लिए परीक्षण करना एक गूंगी बात है - ग्राहकों को निराश करने का सबसे अच्छा तरीका है। मैं पते को दो बार टाइप करने का अनुरोध करता हूं और संकेत देता हूं कि कुछ संभावित मुद्दे (लापता @, ;comआदि) हैं और उपयोगकर्ता को यदि वे चाहें तो उन्हें सही करने दें (और जो भी वे मुझे भेजते हैं उसे स्वीकार करें)
WoJ

4
मैं WoJ द्वारा दिए गए जवाब से पूरी तरह सहमत हूं। एक वैध ई-मेल पते का प्रारूप एक सरल नियमित अभिव्यक्ति के साथ जांचने के लिए बहुत जटिल है। यह सुनिश्चित करने का एकमात्र तरीका है कि पता मान्य है, इसे आज़माने के लिए।
निकोल

जवाबों:


4940

नियमित अभिव्यक्तियों का उपयोग करना शायद सबसे अच्छा तरीका है। आप यहाँ परीक्षणों का एक गुच्छा ( क्रोमियम से लिया हुआ ) देख सकते हैं

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>


574
यह regex मान्य, इन-उपयोग ईमेल को समाप्त करता है। प्रयोग नहीं करें। Google को "RFC822" या "RFC2822" के लिए एक उचित रीगेक्स प्राप्त करने के लिए।
रैंडल श्वार्ट्ज सेप

42
यह RFC 822 में उदाहरणों को भी स्वीकार नहीं करता है। कुछ सरल मामलों में यह a \ @ b @ c.com, a(b)@n.com से मेल नहीं खाता है। अधिक के लिए RFC देखें। यहाँ एक regex है जो किसी भी वैध पते को अस्वीकार नहीं करेगा [^ @] + @ [^ @] + \ _ [^ @] + और सामान्य त्रुटियों से बचाता है।
Vroo

125
@ गौडपर्सन मैंने सिर्फ यह बताने के लिए n @ ai को ईमेल करने की कोशिश की कि उनके पास एक अच्छा ईमेल पता है। लेकिन अफसोस, मुझे नहीं जाने देंगे। मुझे संदेह है कि जो भी मेरी साइट की जावास्क्रिप्ट सत्यापन की तुलना में ईमेल के माध्यम से दूसरों के साथ संवाद करने में बड़ी समस्या है! लेकिन चुनौती के लिए उठने के लिए धन्यवाद।
बेन रॉबर्ट्स

26
यह एक समाधान है जो अधिकांश देशी अंग्रेजी बोलने वालों के साथ अच्छा लगता है, लेकिन यह तुर्की परीक्षण (जोएल स्पोल्स्की देखें) में विफल रहता है। अधिकांश यूनिकोड पत्रों की अनुमति है, और उदाहरण के लिए, अर्जेंटीना में "ñoñó1234@server.com" जैसे पते पूरी तरह से सामान्य हैं। joelonsoftware.com/articles/Unicode.html
oligofren

139
आप ईमेल पते, अवधि को मान्य नहीं कर सकते। केवल वही जो ईमेल पते को मान्य कर सकता है, वह ईमेल पते का प्रदाता होता है। उदाहरण के लिए, यह उत्तर कहता है कि ये ईमेल पते: %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 कभी भी इनमें से किसी भी ईमेल पते की अनुमति नहीं देगा। आपको यह ईमेल पते को स्वीकार करके और उस ईमेल पते पर एक ईमेल संदेश भेजकर करना चाहिए, जिसकी कोड / लिंक के साथ उपयोगकर्ता को वैधता की पुष्टि करने के लिए दौरा करना होगा।
केविन फेगन

829

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

anystring@anystring.anystring

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

/\S+@\S+\.\S+/

उदाहरण जावास्क्रिप्ट समारोह:

function validateEmail(email) 
    {
        var re = /\S+@\S+\.\S+/;
        return re.test(email);
    }
    
console.log(validateEmail('anystring@anystring.anystring'));


69
आप 20x को कुछ समय के लिए कार्यान्वित कर सकते हैं जो कुछ उपयोगकर्ताओं के लिए समस्याएँ पैदा कर सकता है और भविष्य में मान्य नहीं हो सकता है, या आप ImmortalFirefly के संस्करण को हड़प सकते हैं ताकि यह सुनिश्चित हो सके कि वे कम से कम इसे वास्तविक बनाने के प्रयास में लगाए। आपके आवेदन के आधार पर, किसी के पास आने की अधिक संभावना हो सकती है, क्योंकि आप उनके अपरंपरागत ईमेल को स्वीकार नहीं करते हैं, बजाय इसके कि कोई व्यक्ति जो ईमेल पते दर्ज करके समस्याओं का कारण बनता है, जो वास्तव में मौजूद नहीं हैं (जो वे प्रवेश करके वैसे भी कर सकते हैं 100% वैध RFC2822 ईमेल पता लेकिन एक अपंजीकृत उपयोगकर्ता नाम या डोमेन का उपयोग करके)। Upvoted!
user83358

82
@ImmortalFirefly, आपके द्वारा प्रदान किया गया रेगेक्स वास्तव में मेल खाएगा name@again@example.com। जावास्क्रिप्ट कंसोल में अपनी लाइन चिपकाने का प्रयास करें। मेरा मानना ​​है कि आपका इरादा केवल पूरे पाठ से मेल खाना था, जिसके लिए पाठ '^' की शुरुआत और पाठ '$' ऑपरेटरों के अंत की आवश्यकता होगी। मैं जो उपयोग कर रहा हूं वह है/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test('name@again@example.com')
ऑरेगॉनट्रैल

8
इस मान्यता के आधार पर यह ईमेल मान्य है: @ this..com
एहसान

4
हम्म। विकिपीडिया कहता है कि "very.unusual.@.unusual.com"@example.comएक मान्य ईमेल पता है। /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test('"very.unusual.@.unusual.com"@example.com') // false। उफ़।
बेकन बिट्स

3
क्या यह भी अनुमति नहीं है @@@.@? : D
hfossli

762

पूर्णता के लिए, यहां आपके पास एक और आरएफसी 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

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

जोर मेरा


84
NB: "वास्तविक उपयोग में आज " कोड लिखा होने पर मान्य हो सकता है, 200x में वापस। कोड होगा संभावना है कि विशिष्ट वर्ष से परे उपयोग में हैं। (अगर मेरे पास हर "मेह" के लिए एक पैसा था, तो कोई भी कभी भी उन विशिष्ट लोगों को छोड़कर 4 + -सीटी टीएलडी का उपयोग नहीं करेगा "मुझे ठीक करना था, मैं दुनिया के तांबे और निकल बाजार को कोने में रख सकता था;))
पिस्कॉर ने बिल्डिंग

7
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] /
१re

5
इसके अलावा, पहला भाग होना चाहिए (?: [अ। एक पूंजी के साथ अ) झूठी नकारात्मक से बचने के लिए जब एक उपयोगकर्ता अपने ईमेल पते को कैपिटल करता है।
डॉन रोलिंग

9
@DonRolling ऐसा मत करो। यही कारण है कि ", A से Z A से Z तक" बस मतलब यह नहीं है, यह भी अर्थ है "[\] ^ _` "उन रहे हैं, क्योंकि बीच में " Z "और" एक "। उपयोग \w, या बेहतर, बस इसके साथ कुछ भी करने से पहले ईमेल पते को कम करें क्योंकि यह वैसे भी सम्मेलन है।
किर्ब

5
"आपको इसे अपडेट करने की आवश्यकता होगी क्योंकि नए शीर्ष-स्तरीय डोमेन जोड़े जाते हैं।" ठीक है, अब उसके लिए इतना - 1500 से अधिक मान्यता प्राप्त TLD हैं।
नाथन उस्मान

377

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

^\S+@\S+$

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


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

20
आप अभी भी इसे सरल रख सकते हैं लेकिन यह सुनिश्चित करने के लिए थोड़ा और करें "।" @ के बाद कहीं केवल अंकों या अंकों के बाद, इसलिए मेरे जैसे @ यहाँ, मेरे यहाँ @, और मुझे @ herecom मान्य नहीं हैं ... ^ \ S + @ \ S + [\]। [0-9a-z ] + $
टिम फ्रेंकलिन

14
मुझे लगता है कि ई-मेल पते में रिक्त स्थान हो सकते हैं। शायद इसका उपयोग करना बेहतर है.+@.+
सैम

11
/\S+@\S+/.test("áéíóúý@ÁÉÍÓÚÝð") true
gtournie 4

110
@gtournie किसी को परवाह नहीं है। कोई भी व्यक्ति दुर्घटना में ईमेल क्षेत्र में प्रवेश करने वाला नहीं है , और यह सब सामने के अंत का सत्यापन है: लोगों को गलती से सूचना के गलत बिट में प्रवेश करने से रोकने के लिए, जैसे कि उनका नाम, ईमेल क्षेत्र में।
meagar

330

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

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


112
-1 क्यों मैं अपना समय एक ईमेल पते को सत्यापित करने में बिताना चाहूंगा जो रेगेक्स नियंत्रण भी पास नहीं करता है?
कोमराधोमोर

63
@kommradHomer - एक "regex अमान्य" पता लगभग हमेशा मान्य होता है, क्योंकि ईमेल पते को मान्य करने के लिए आप जो भी regex उपयोग करते हैं वह लगभग निश्चित रूप से गलत है और मान्य ईमेल पतों को बाहर करेगा। एक ईमेल पता है name_part@domain_partऔर व्यावहारिक रूप से कुछ भी, सहित एक @, name_part में वैध है; यह पता foo@bar@machine.subdomain.example.museumकानूनी है, हालांकि इसे छोड़ दिया जाना चाहिए foo\@bar@machine....। एक बार जब ईमेल डोमेन पर पहुँच जाता है जैसे 'example.com' कि डोमेन "स्थानीय" मेल को रूट कर सकता है तो "अजीब" उपयोगकर्ता नाम और होस्टनाम मौजूद हो सकते हैं।
स्टीफन पी

6
में नाविक के जवाब में दूसरे regex stackoverflow.com/a/1373724/69697 उपयोग के लिए व्यावहारिक है और लगभग कोई मिथ्या नकारात्मक होना चाहिए। मैं यहाँ @kommradHomer से सहमत हूँ - अगर आपके पास नहीं है तो एक ईमेल क्यों भेजें? मैं समझ से बाहर के रीपेक्स और कोड को सरल रखने की इच्छा के लिए रिफ्लेक्सिव नापसंद को समझ सकता हूं, लेकिन यह कोड की एक दो पंक्तियां हैं जो निश्चित रूप से अमान्य वस्तुओं को तुरंत निराकरण करके आपके सर्वर को बहुत परेशानी से बचा सकती हैं। अपने आप पर एक रेगेक्स अप्रभावी है, लेकिन सर्वराइड सत्यापन के लिए एक अच्छा पूरक के रूप में कार्य करता है।
बेन रेजेंसपैन

6
@ मादुर I ने "लगभग हमेशा वैध" माना है, शायद यह ओवरस्टैट कर रहा है, लेकिन मैंने अपने (पूरी तरह से वैध और काम करने वाले) ईमेल पतों को वेबसाइटों द्वारा बहुत बार अस्वीकार कर दिया है, सिर्फ इसलिए कि मेरे पास एक .usडोमेन है या क्योंकि मैंने +बाईं ओर एक का उपयोग किया है @- कई स्थानों पर इन प्रबल त्रुटियां ठीक कर लें, लेकिन स्थानीय-भाग (@ के बाएं) हो सकता है कुछ भी डोमेन मालिक चाहता है। -> "foo@bar.com"@example.com <- एक वैध ईमेल पता है।
स्टीफन पी

8
@kommradHomer "एक रेगेक्स-अमान्य पता 100% एक अमान्य पता है।" मुझे क्षमा करें ... क्षमा करें? क्या आप जानते हैं कि मुझे कितनी बार बताया गया है कि foo+bar@gmail.com एक वैध ईमेल नहीं है, जब वास्तव में यह सही है? आपका तर्क अत्यंत त्रुटिपूर्ण है। मैंने ईमेल के साथ फ़ॉर्म इस प्रकार प्रस्तुत किए हैं: thisisafakeemailbutitwillpassyourstupidregexcheck@regexchecksareretarded.com और क्या लगता है? यह पता लगाता है कि रेक्स चेक करता है ... लेकिन यह एक वैध ईमेल नहीं है (हालांकि तकनीकी रूप से यह आईएस है, लेकिन मैं वादा करता हूं कि यह मौजूद नहीं है ... फिर भी उसकी ठुड्डी खरोंच है )। जैसा कि कई लोग कह चुके हैं, IT IS A BAD IDEA ....
साउंडफिक्सो

211

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

<form><input type="email" placeholder="me@example.com" required>
    <input type="submit">
</form>

jsFiddle लिंक

से एचटीएमएल 5 कल्पना :

एक वैध ई-मेल पता एक स्ट्रिंग है जो emailनिम्नलिखित एबीएनएफ के उत्पादन से मेल खाता है , जिसके लिए निर्धारित चरित्र यूनिकोड है।

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])?)*$/

29
यह अच्छा है, लेकिन इसके साथ समस्या यह है कि यह एक formटैग के अंदर होना चाहिए और एक submitइनपुट द्वारा सबमिट किया जाना चाहिए , जो हर किसी के पास करने की लक्जरी नहीं है। इसके अलावा, आप वास्तव में त्रुटि संदेश नहीं दे सकते।
जेसन

3
मैंने नीचे एक उत्तर जोड़ा है जो आपको फ़ॉर्म से मुक्त करता है और सबमिट करता है। लेकिन हाँ, ब्राउज़र आमतौर पर केवल कुछ प्लाज़ेबिलिटी चेक लागू करते हैं, न कि पूर्ण RFC 822 सत्यापन।
बोल्ड्यूविन

8
@ br1: यह केवल इसलिए अमान्य नहीं है क्योंकि कोई "a" toplevel डोमेन मौजूद नहीं है। क्या आपके इंट्रानेट में कुछ आईपी के लिए एक संकल्प है?
भेड़

7
Html5 ईमेल फ़ील्ड प्रकार उपयोगकर्ता @ ईमेल जैसे ईमेल स्वीकार करता है
Puce

1
नोट @ प्यूस की टिप्पणी: HTML 5 ईमेल इनपुट स्वीकार करता है user@email, उदाहरण के लिए, PHP का filter_varनहीं। इसके कारण समस्या हो सकती है।
7

136

मैंने इसे सबसे अच्छा समाधान पाया है:

/^[^\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. чебурашка@ячик-с-апельсинами.рф (सीरिलिक)

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


9
यह वही है जो मैं कर रहा हूं। ये सभी "जटिल" उत्तर समस्याओं का उत्पादन करते हैं: वे या तो सज़ा-कोड IDN की अनुमति नहीं देते हैं या TLDs के एक निश्चित सेट का उपयोग करते हैं या उपयोगकर्ता को अपने ईमेल-उपसर्ग में [@ çµ.ö जैसे पात्रों का उपयोग न करने के लिए प्रतिबंधित करते हैं (@ से पहले) या डोमेन नाम। सुरक्षा कारणों के लिए सत्यापन के लिए फ्रंटएंड में जावास्क्रिप्ट (कारण के बैकएंड उपयोग के लिए नहीं) पर्याप्त नहीं है। तो क्यों न सिर्फ यूजर को बेसिक टाइपोस को रोकने में मदद की जाए। मूल टाइपोस हैं: TLD या उपयोगकर्ता-उपसर्ग (@ से पहले) या डोमेन-पार्ट या गलती के @रूप में .(या इसके विपरीत) भूल जाते हैं । कारण हमें सर्वर-साइड पर अधिक प्रतिबंधात्मक तरीके से रहना होगा।
हाफेनक्रिंच

कुछ अजीब कारणों username@domain.comसे इस पैटर्न के साथ काम नहीं करता है
आइंस्टीन

2
आपके regex के अनुसार "_.............. kamal@gmail.com" वैध है, जो नहीं होना चाहिए!
कमल नयन

1
यहाँ उदाहरण के साथ RegEx कहा गया है, यदि आप इस समाधान के साथ टिंकर करना चाहते हैं: regex101.com/r/AzzGQU/2
ryanm

7
यह रेगेक्स सही है। अगर कोई भी उनके ईमेल में प्रवेश कर रहा है, a@b@c@d.x.y.@.zतो हो सकता है कि वे बुरे समय के लायक हों? : डी
सीरियोरोमिमोन

94

आधुनिक ब्राउज़रों में आप शुद्ध जावास्क्रिप्ट और 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/ पर एक साथ रखा है । स्क्वीर्टल के उत्तर से फीचर डिटेक्शन और नंगे-हड्डियों के सत्यापन के साथ संयुक्त , यह आपको नियमित अभिव्यक्ति नरसंहार से मुक्त करता है और पुराने ब्राउज़रों पर बोर नहीं करता है।


4
यह समस्या पर विचार करने के लिए एक चतुर विचार है, लेकिन यह काम नहीं करता है क्योंकि ब्राउज़र में भद्दा सत्यापन भी है। जैसे क्रोम, फ़ायरफ़ॉक्स और सफारी के वर्तमान संस्करणों में .@aमान्य है true
हांक

13
@HenryJackson दुर्भाग्य से, इस मामले में हाँ। ऐसा इसलिए है क्योंकि RFC के अनुसार यह एक वैध ई-मेल पता (इंट्रानेट लगता है) है। ब्राउजर ग्रिल्ड हो जाते, अगर वे बहुत ज्यादा संकीर्ण हो जाते और गलत निगेटिव उत्पन्न करते।
बोल्ड्यूवेन

3
फीचर डिटेक्शन और ग्रेसफुल डिग्रेडेशन शामिल करने के लिए अपडेट किया गया, अब यह नए ब्राउज़रों पर नहीं टूटता है, लेकिन आपके द्वारा पसंद किए जाने वाले किसी भी रेक्स का उपयोग करता है।
रॉनी

अच्छा समाधान है। अफसोस की बात यह है कि यह केवल HTML5 + के लिए है।
एडवर्ड ओलिमिसन

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

69

यह सही 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);
}

IDN पते मान्य नहीं हैं (info@üpöü.com)
DAH

66

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

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)>)$

1
@ काटो: यह कुछ असंगत एक्सटेंशन का उपयोग करता है, जिसमें (?>बैकट्रैकिंग को रोकना और (?<angle><)…(?(angle)>)लंबा प्रदान करने से बचना शामिल है |
Ry-

60

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

email.indexOf("@") > 0

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

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


3
क्या होगा अगर एक से अधिक '@' चिन्ह होंगे? अन्य प्रतिबंधित प्रतीक? इस मान्यता पर भरोसा नहीं किया जा सकता है ...
खाएं

56

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: दो-वर्ण डोमेन बनाने के लिए अंतिम बिंदु के बाद पर्याप्त वर्ण होना चाहिए। मुझे यकीन नहीं है कि अगर कोष्ठक आवश्यक हैं।


यह fn अच्छा लग रहा है, लेकिन क्या यह शीर्ष उत्तर में लिखे रेगेक्स से बेहतर है?
अतुल गोयल

4
मुझे शक है। मैं इसका उपयोग केवल यह जांचने के लिए करता हूं कि क्या एक स्ट्रिंग ईमेल की तरह दिखती है और विवरण को सर्वर-साइड कोड पर छोड़ देती है।
मिलो

यह ओके को किसी भी स्ट्रिंग को मान्य करता है जैसे 'आआ', 'बिना' @ 'और'। '
गेन्नेडी शुमाखेर

1
यह नहीं करना चाहिए lastIndexOf () को सुई नहीं मिलने पर -1 लौटना चाहिए।
मिलो आइस

"यहां तक ​​कि अगर @ईमेल उपयोगकर्ता नाम के अंतिम चरित्र के रूप में प्रकट होता है, तो भी इसे उद्धृत किया "जाना चाहिए ताकि पते में यह @और आखिरी के बीच हो @।" किस बारे में "@@"@example.com?
Ry-

47

यह 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;}

7
यह कभी-कभी लोकप्रिय .museumऔर .travelडोमेन को फ़िल्टर करता है (4 के बाद चार सीमा के कारण .)
bobobobo

4
{2,4} से {2,6} बदलना कोई समस्या नहीं होगी
एंटोन एन

11
@ एटन एन: इसमें अन्य समस्याओं के साथ-साथ लगभग एक गजिलियन भी है; अंतिम {2,4}केवल एक उपयोगी संकेतक है (जैसा कि "जब आप उस त्रुटि को देखते हैं, तो दूसरों के आसपास होने की संभावना है")। सबसे बुनियादी एक की कमी है +स्थानीय हिस्से में; उपरोक्त टिप्पणी की गई सभी त्रुटियों को इंगित करने के लिए यह टिप्पणी बॉक्स बहुत छोटा है ।
पिस्कोर ने

37
तुम सिर्फ क्यों नहीं कर सकते return filter.test(email.value);?
एमटी।

3
@AntonN: अब हमारे पास 10+ वर्ण TLD ( xn--clchc0ea0b2g2a9gcd) हैं। अभी भी कोई समस्या नहीं है?
पिस्कोर ने बिल्डिंग

42

यह करो:

[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


@Kaval जावास्क्रिप्ट कोड /iनियमित अभिव्यक्ति के अंत में ध्वज के कारण संवेदनशील नहीं है । मैं इस तथ्य का उल्लेख करता हूं कि इसे केस-असंवेदनशील होने की जरूरत है, लेकिन मैं इसे और स्पष्ट करूंगा।
रयान टेलर

मेरे लिए एक आकर्षण के रूप में काम किया
एलेक्स

40

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

  • मूल
    /^(([^<>()\[\]\\.,;:\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,})$/

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

और आप यहां रिजल्ट देख सकते हैं ।

यहां छवि विवरण दर्ज करें


यह एक अच्छा समाधान की तरह लगता है, यह नए TLDs और 1 पत्र ईमेल के साथ भी काम करता है
मार्क ह्यूजेस

क्यों john..doe@example.comसही नहीं होना चाहिए? यह एक मान्य कोने का मामला है।
वेलेरियो बज़

24

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

अब चूंकि आप केवल 90% मामलों को कवर कर सकते हैं, इसलिए कुछ लिखें:

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

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

दुनिया को सरल कोड चाहिए ...


15
यह इतने सारे अमान्य ईमेल पतों को दर्ज करने की अनुमति देता है जो बेकार की सलाह है।
23

3
यह बिल्कुल भी डिबग करने के लिए असंभव नहीं है। इस थ्रेड में कई बेहतरीन उदाहरण हैं जो "इससे आगे" @ 'है' को मान्य करता है। आपका उदाहरण "u @" को एक वैध ईमेल पता माना जाता है। कम से कम इस बात का मूल्यांकन करें कि क्या कोई डोमेन है या कुछ और है। एक डोमेन हो सकता है। आपका एक उदाहरण है जिसे मैं "आक्रामक रूप से आलसी कोडिंग" कहूंगा। मुझे यकीन नहीं है कि आप इसका बचाव क्यों कर रहे हैं क्योंकि यह धागे में अब तक का सबसे कम उत्तर दिया गया है।
cazlab

3
@cazlab शायद आप सही हैं। आखिरकार मुझे वोट दिया गया है। अलग-अलग आप से मुझे नहीं लगता, हालांकि ऊपर दिए गए किसी भी कोड में स्निपेट को डिबग करना आसान है। आवश्यकता पड़ने पर कम से कम मेरे 'एग्रेसिवली आलसी' दृष्टिकोण को बेहतर बनाया जा सकता है।
Zo72

3
यह रेगेक्स का उपयोग करने से कैसे अलग है? (.+)@(.*)एक ही काम करता है, और कम।
स्नोस्टॉर्म

4
+1 - यदि उद्देश्य यह सुनिश्चित करना है कि उपयोगकर्ता ने कम से कम ई-मेल पते में डालने का प्रयास किया है, तो यह देखने के लिए जांचें कि क्या यह निर्धारित किया जा सकता है कि ई-मेल पता निश्चित रूप से ई-मेल नहीं है महान समाधान। एक अच्छा उदाहरण यह होगा कि आप किसी व्यक्ति का उपयोगकर्ता नाम ई-मेल पता चाहते हैं। यदि उपयोगकर्ता 'sexy_chick_23' में टाइप करता है, तो इस regex का उपयोग उन्हें एक सिर देने के लिए किया जा सकता है जो एक ई-मेल की उम्मीद है। यदि कुछ टाइप किया गया है जो ई-मेल जैसा दिखता है, लेकिन ऐसा नहीं है, तो उपयोगकर्ता को 'पुष्टि' ई-मेल कभी नहीं मिलेगी और साइन अप प्रक्रिया कभी भी मान्य नहीं होगी।
क्रिस डुट्रो

23

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

<input type="email"/>

सत्यापन के लिए एक फ़ंक्शन लिखने की कोई आवश्यकता नहीं है।


4
IE <10 इसका समर्थन नहीं करता है, और न ही एंड्रॉइड का अपना ब्राउज़र है।
फ्रैंक कॉनिजन

7
Upvoting। IE <10 मृत है।
माइकल शेपर

19

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

सुधारने के लिए कुछ बातें:

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

if (reg.test(/@/))

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


19

यह है कि नोड- 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])\]))$/

14

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

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
}

1
abc@xyzएक पूरी तरह से वैध ईमेल है जो आपके regex द्वारा नहीं पहचाना जाता है।
पूर्णो

3
नहीं यह नहीं। सही ईमेल पैटर्न कुछ है @something.something, abc @ xyz उस पैटर्न से मेल नहीं खाता है। तो, इसका वैध पता नहीं है।
आर्किड


5
क्या आपने विकिपीडिया पृष्ठ बनाया है? एक TLD एक मान्य होस्टनाम है। तो abc@tldएक मान्य ईमेल पता है।
टोटो

2
एक ईमेल पते को मान्य करने का एकमात्र तरीका एक ईमेल भेजना है फिर प्रतिक्रिया की प्रतीक्षा करें। इसके अलावा, यहां एक url है जहां आप जांच कर सकते हैं कि आपका पता RFC822 है या नहीं । आप देख सकते हैं कि abc @ xyz RFC822 के लिए एक वैध पता है।
टोटो

14

रेगेक्स अपडेट 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


यह एक मानक email@domain.com के लिए असफल
रिक्स

1
@ यह केवल सच नहीं है। कृपया फिर से देखें
malimo

13

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

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

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

उदाहरण के लिए, हालांकि पता example@example.cccregex पास होगा, यह एक मान्य ईमेल cccनहीं है , क्योंकि IANA द्वारा शीर्ष-स्तरीय डोमेन नहीं है।

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


13

ईमेल पते को मान्य करने के लिए 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])+

मैं RFC5322 में आपका regexp नहीं देखता: tools.ietf.org/html/rfc5322 - कुछ गलती है?
कामिल Kiełczewski 13

"सर्वश्रेष्ठ रेगेक्स कभी"? संभवतः यहाँ किसी प्रकार का स्पष्टीकरण?
कनेक्टयूरचर्जर

क्यों यो ने कहा कि सभी का सबसे अच्छा समाधान है, क्या आप कृपया थोड़ा और समझा सकते हैं?
ननकोडर

मुझे याद नहीं आ रहा है कि मैंने "सर्वश्रेष्ठ रेगेक्स कभी" क्यों लिखा है। क्षमा करें दोस्तों अगर यह आपको परेशान करता है।
प्रभात कसेरा

12

ईमेल पतों को मान्य करने के लिए नियमित अभिव्यक्तियों का उपयोग करने के बारे में एक बहुत अच्छी चर्चा है; " ई-मेल एड्रेस की तुलना रेगुलर एक्सप्रेशंस मान्य करना "

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

/^[-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

9
-1 सफेदी छोड़ना बहुत वांछित है - विशेष रूप से, आप चूक गए .jobs। इसके अलावा, लाइव आईडीएन हैं (जिनमें से अधिकांश, मैं मानता हूं, केवल आपके पोस्ट के बाद .中國जून 2010 में स्वीकृत किया गया था; लेकिन अधिकांश वर्षों से काम कर रहे हैं)।
पिस्कोर ने

2
-1 लगातार शीर्ष स्तर डोमेन का उपयोग न करें। वहाँ हमेशा (और उदाहरण के लिए 2013 होगा) नया tld जोड़ा जा सकता है।
मिहो

नए TLD के 100 की पुष्टि की गई है। यह उत्तर मान्य नहीं है और इसका उपयोग कभी नहीं किया जाना चाहिए।
डीन मेहान

हाँ। मैंने इसे 2011 में कहा है, और मैं इसे फिर से कहूंगा: "विशेष" डोमेन का एक श्वेतसूची केवल समय के साथ खराब हो जाएगी, क्योंकि अधिक TLD स्वीकृत हैं। 100 से अधिक पूरी तरह से वैध टीएलडी हैं जो उपरोक्त श्वेतसूची से मेल नहीं खाते हैं: en.wikipedia.org/wiki/List_of_Internet_top-level_domains
Piskvor ने 15:14 पर भवन

यह 2015 है। आपकी अभिव्यक्ति व्यावहारिक नहीं है। आपको इस उत्तर को नीचे ले जाना चाहिए, लेकिन आपके संभवतः उन सभी पृष्ठों को ठीक करने में व्यस्त हैं जिन्हें आपने इस अभिव्यक्ति को रखा है। सही?
एरिक लेरॉय

12

जाहिरा तौर पर, यह बात है:

/^([\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 से लिया गया ।

लेकिन, निश्चित रूप से, यह अंतर्राष्ट्रीयकरण की अनदेखी कर रहा है।


12

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

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'); }

10
आपको == trueअपने उदाहरण की आवश्यकता नहीं है ।
ल्यूक एल्डर्टन

11

नियमित अभिव्यक्तियों का मेरा ज्ञान उतना अच्छा नहीं है। इसलिए मैं सामान्य सिंटैक्स को पहले एक साधारण नियमित अभिव्यक्ति के साथ जांचता हूं और बाद में अन्य कार्यों के साथ अधिक विशिष्ट विकल्पों की जांच करता हूं। यह सबसे अच्छा तकनीकी समाधान नहीं हो सकता है, लेकिन इस तरह से मैं अधिक लचीला और तेज हूं।

सबसे आम त्रुटियां जो मुझे आई हैं, वे रिक्त स्थान हैं (विशेषकर शुरुआत और अंत में) और कभी-कभी एक डबल डॉट।

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

10
<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>

शायद अगर आपने इसके साथ जाने के लिए स्पष्टीकरण या विवरण जोड़ा? मुझे नहीं लगता कि आपको वास्तव में किसी भी html को दिखाने की आवश्यकता है; सभी लोग जावास्क्रिप्ट और रेगेक्स से संबंधित हैं। यदि आप अपने उत्तर को सिर्फ जावास्क्रिप्ट के लिए कम करते हैं, और इसके साथ जाने के लिए थोड़ा धुंधला जोड़ते हैं, तो मैं आपको एक उत्थान दूंगा।
bgmCoder

9

मैं 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 एड्रेस फील्ड में डैश मान्य है

ये रहा :

http://regexr.com/3f07j

या रेगेक्स:

Regex = /(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@[*[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+]*/

8

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})?$/

यहाँ मैं पोस्ट करता हूँ अगर यह त्रुटिपूर्ण है - हालाँकि यह हमेशा मेरी आवश्यकताओं के लिए एकदम सही है।


1
ईमेल के नाम भाग में + की अनुमति नहीं देता है।
पॉल गो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.