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


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


3259


मूल


यद्यपि यह समाधान सरल हो सकता है, मुझे यकीन है कि यह उन उपयोगी चीजों में से एक है जिसे लोग साइट पर अपनी प्रविष्टि के लिए गुगल करेंगे और पात्र होंगे यदि केवल Google ही देखने के लिए पहली जगह होगी :) बस हर बार बंद किए गए डुप्लीकेट देखें। - Esteban Küber
मुझे यकीन है कि यह उन उपयोगी चीजों में से एक है जो लोग गुगलिंग करेंगे  वास्तव में, इस तथ्य के रूप में मैं इस सवाल पर कैसे आया! - Peter C
के संभावित डुप्लिकेट ईमेल पते मान्य करने के लिए सबसे अच्छी नियमित अभिव्यक्ति क्या है? - Brad Mace
कृपया यह अधिकार प्राप्त करें, बहुत सी वेबसाइट "firstName@secondName.name" के मेरे ईमेल पते को पसंद नहीं करती है, सभी शीर्ष स्तर वाले डोमेन इसे 2 या 3 अक्षरों को समाप्त नहीं करते हैं। - Ian Ringrose
ई-मेल के लिए रेगेक्स चेक के उपयोग के लिए कोई समर्थन मैं 100% के खिलाफ हूं। मैं "foo+bar@gmail.com" का अपना ई-मेल पता बताए जाने से थक गया हूं। सबसे अच्छा विकल्प उपयोगकर्ता से दो बार में अपना ई-मेल टाइप करने के लिए कहता है और यदि आपको रेगेक्स चेकर का उपयोग करना होगा, तो उपयोगकर्ता को बताएं कि उनका ई-मेल पता मान्य नहीं प्रतीत होता है और पूछता है कि क्या वे सुनिश्चित हैं कि उन्होंने इसे टाइप किया है सही। यहां तक ​​कि यह इंगित करने के लिए भी जाएं कि रेगेक्सपी चेक में क्या नहीं देखा गया था, लेकिन फॉर्म को सबमिट करने से रोकें। - Soundfx4


जवाब:


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

function validateEmail(email) {
    var 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());
}

यहां नियमित विस्तार का उदाहरण दिया गया है जो यूनिकोड स्वीकार करता है:

var re = /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;

लेकिन ध्यान रखें कि किसी को केवल जावास्क्रिप्ट सत्यापन पर भरोसा नहीं करना चाहिए। जावास्क्रिप्ट आसानी से अक्षम किया जा सकता है। यह सर्वर पक्ष पर भी मान्य होना चाहिए।

उपरोक्त कार्रवाई में एक उदाहरण दिया गया है:

function validateEmail(email) {
  var 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() {
  var $result = $("#result");
  var 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").bind("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>


3795



यह regex वैध, उपयोग में ईमेल को समाप्त करता है। प्रयोग नहीं करें। उचित रेगेक्स प्राप्त करने के लिए Google "आरएफसी 822" या "आरएफसी 2822" के लिए Google। - Randal Schwartz
@ रैंडल: क्या आप एक ईमेल पते का उदाहरण दे सकते हैं जो इससे नहीं निकलता है? - rossipedia
@ गुडपर्सन मैंने अभी उसे यह जानने के लिए एन @ एआई ईमेल करने की कोशिश की कि उनके पास एक अच्छा ईमेल पता है। लेकिन हां, जीमेल मुझे नहीं जाने देगा। मुझे संदेह है कि जो भी इस साइट की जावास्क्रिप्ट सत्यापन की तुलना में ईमेल के माध्यम से दूसरों के साथ संवाद करने में बड़ी समस्याएं हैं! लेकिन चुनौती के लिए बढ़ने के लिए धन्यवाद। - Ben Roberts
सभी लोगों ने टिप्पणी की कि यह "काफी अच्छा" है: देखो, आप बस इस समस्या के बारे में सोच रहे हैं। ठीक है। यह एक विकल्प है जिसे आप अपने उपयोगकर्ताओं के लिए बना सकते हैं। मैं उस पर पागल नहीं हूँ। लेकिन, आप जानते हैं, तकनीकी रूप से बोलते हुए, आप प्रदर्शनशील रूप से, गलत रूप से गलत हैं। - Wayne Burkett
आप ईमेल पते, अवधि को मान्य नहीं कर सकते हैं। एकमात्र व्यक्ति जो ईमेल पता सत्यापित कर सकता है वह ईमेल पते का प्रदाता है। उदाहरण के लिए, यह उत्तर इन ईमेल पते कहता है: %2@gmail.com, "%2"@gmail.com, "a..b"@gmail.com, "a_b"@gmail.com, _@gmail.com, 1@gmail.com , 1_example@something.gmail.com सभी मान्य हैं, लेकिन जीमेल इन ईमेल पते में से किसी को भी अनुमति नहीं देगा। आपको ईमेल पते को स्वीकार करके और उस ईमेल पते पर एक ईमेल संदेश भेजकर ऐसा करना चाहिए, उपयोगकर्ता को वैधता की पुष्टि करने के लिए उपयोगकर्ता को एक कोड / लिंक के साथ जाना चाहिए। - Kevin Fegan


बस पूर्णता के लिए, यहां आपके पास एक और आरएफसी 2822 अनुपालन रेगेक्स है

आधिकारिक मानक के रूप में जाना जाता है आरएफसी 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])+)\])

(...) अगर हम डबल कोट्स और स्क्वायर ब्रैकेट का उपयोग करके सिंटैक्स को छोड़ देते हैं तो हमें आरएफसी 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])?

एक और परिवर्तन जो आप कर सकते हैं वह दो-अक्षर देश कोड शीर्ष स्तर डोमेन, और केवल विशिष्ट सामान्य शीर्ष स्तर डोमेन की अनुमति देना है। यह regex डमी ईमेल पते जैसे फिल्टर 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

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

जोर मेरा


612



एनबी: "वास्तविक उपयोग में आज"कोड लिखा गया था, 200x में वापस वैध हो सकता है। कोड मर्जी संभवतः उस विशिष्ट वर्ष से परे उपयोग में रहते हैं। (अगर मेरे पास हर "मेह के लिए पैसा था, तो कोई भी कभी भी उन विशिष्ट लोगों को छोड़कर 4 +-पत्र टीएलडी का उपयोग नहीं करेगा" मुझे ठीक करना था, मैं दुनिया के तांबे और निकल बाजार को तोड़ सकता था;)) - Piskvor
आरएफसी 2822 के व्यावहारिक कार्यान्वयन के लिए, सिंगल चार डोमेन एक्सटेंशन को रोकने के लिए अंत में थोड़ा संशोधित किया जाना चाहिए। / [एक-Z0-9! # $% & '* + \ / =? ^ _{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_{|} ~ -]) * @?। (? [एक-Z0-9] ([एक-Z0-9 -] * [एक-Z0-9]) \) + [एक-z0- 9] [एक-Z0-9 -] * [एक-Z0-9] / - will Farrell
साथ ही, पहला भाग होना चाहिए (?: [ए-जेड पूंजी ए के साथ झूठी नकारात्मकताओं से बचने के लिए जब कोई उपयोगकर्ता अपना ईमेल पता कैपिटल करता है। - Don Rolling
कल्पना के साथ, d._.___d@gmail.com वैध ईमेल नहीं है, लेकिन यह अभी भी पता लगाता है कि यह सही है - Raptor
@DonRolling ऐसा मत करो। इसका मतलब यह नहीं है कि "ए टू जेड, ए टू जेड" का अर्थ है, "[\] ^ _` "क्योंकि वे हैं के बीच में "जेड" और "ए"। उपयोग \w, या बेहतर, इसके साथ कुछ भी करने से पहले ईमेल पता को कम करें क्योंकि वैसे भी यह सम्मेलन है। - kirb


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

anystring@anystring.anystring

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

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

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

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

551



/\S+@\S+\.\S+/.test('name@again@example.com')  true - neoascetic
@ नोसासेटिक शाज़म! /[^\s@]+@[^\s@]+\.[^\s@]+/.test('name@again@example.com') // false - n0nag0n
आप कुछ 20x लागू कर सकते हैं जो कुछ उपयोगकर्ताओं के लिए समस्याएं पैदा कर सकता है और भविष्य में मान्य नहीं हो सकता है, या आप यह सुनिश्चित करने के लिए अमरोर्टफिरफ्लाई के संस्करण को पकड़ सकते हैं कि कम से कम इसे वास्तविक दिखने के प्रयास में डाल दें। आपके आवेदन के आधार पर किसी के सामने आने की संभावना अधिक हो सकती है क्योंकि आप पागल हो जाएंगे क्योंकि आप उन लोगों के बजाय अपरंपरागत ईमेल स्वीकार नहीं करते हैं जो ईमेल पते दर्ज करके समस्याएं पैदा करते हैं जो वास्तव में मौजूद नहीं हैं (जो वे प्रवेश करके वैसे भी कर सकते हैं एक 100% वैध आरएफसी 2822 ईमेल पता लेकिन एक अपंजीकृत उपयोगकर्ता नाम या डोमेन का उपयोग कर)। Upvoted! - user83358
@ImmortalFirefly, आपके द्वारा प्रदान की गई रेगेक्स वास्तव में मेल खाएगी name@again@example.com। जावास्क्रिप्ट कंसोल में अपनी लाइन चिपकाने का प्रयास करें। मेरा मानना ​​है कि आपका इरादा केवल पूरे पाठ से मेल खाना था, जिसके लिए पाठ '^' की शुरुआत और पाठ '$' ऑपरेटरों के अंत की आवश्यकता होगी। मैं जिस का उपयोग कर रहा हूं वह है /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test('name@again@example.com') - OregonTrail
क्या लोग झूठी सकारात्मकताओं के बारे में शिकायत करना बंद कर देंगे? 9 5% गलतियों को पकड़ने के लिए यह एक सरल रेगेक्स है। यदि आप वास्तव में विशाल regexes का उपयोग करना चाहते हैं और अभी भी सही से दूर हो, अन्य उत्तरों देखें। - André Chalella


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

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


293



-1 मैं अपना ईमेल उस ईमेल पते को मान्य क्यों करना चाहता हूं जो रेगेक्स नियंत्रण को भी पास नहीं करता है? - kommradHomer
@PaoloBergantino मैं बस यह नहीं छोड़ता कि regex एक बुरा विचार है और सिर्फ एक अनुमान है। एक regex-अवैध पता% 100 एक अमान्य पता है। - kommradHomer
@kommradHomer - एक "regex अमान्य" पता लगभग हमेशा वैध है, क्योंकि जो भी regex आप ईमेल पते को सत्यापित करने के लिए उपयोग करते हैं वह लगभग निश्चित रूप से गलत है और वैध ईमेल पते को बहिष्कृत करेगा। एक ईमेल पता है name_part@domain_part और व्यावहारिक रूप से कुछ भी, समेत एक @, name_part में मान्य है; पता foo@bar@machine.subdomain.example.museum कानूनी है, हालांकि इसे बच जाना चाहिए foo\@bar@machine....। एक बार जब ईमेल डोमेन तक पहुंच जाता है उदा। 'example.com' कि डोमेन "स्थानीय रूप से" मेल को रूट कर सकता है, इसलिए "अजीब" उपयोगकर्ता नाम और होस्टनाम मौजूद हो सकते हैं। - Stephen P
Voyager के जवाब में दूसरा regex stackoverflow.com/a/1373724/69697 उपयोग के लिए व्यावहारिक है और लगभग कोई झूठी नकारात्मक नहीं होना चाहिए। मैं यहां @ kommradHomer से सहमत हूं - अगर आपको ऐसा ईमेल नहीं है तो ईमेल क्यों भेजें? मैं समझने योग्य regexes के लिए रिफ्लेक्सिव नापसंद समझ सकता हूं और कोड को सरल रखने की इच्छा रखता हूं, लेकिन यह कोड की कुछ पंक्तियां हैं जो आपके सर्वर को निश्चित रूप से अमान्य वस्तुओं से बाहर निकलने से बहुत परेशानी बचा सकती हैं। अपने आप पर एक regex असहाय है, लेकिन सर्वरसाइड सत्यापन के लिए एक अच्छा पूरक के रूप में कार्य करता है। - Ben Regenspan
@dmur मैं मानता हूं कि "लगभग हमेशा मान्य" शायद इसे अधिक बढ़ा रहा है, लेकिन मेरे पास मेरे (पूरी तरह वैध और काम करने वाले) ईमेल पते बहुत अधिक बार वेबसाइटों द्वारा खारिज किए गए हैं, सिर्फ इसलिए कि मेरे पास .us डोमेन या क्योंकि मैंने एक का इस्तेमाल किया था + के बाईं ओर @ - कई स्थानों ने इन गंभीर त्रुटियों को ठीक कर दिया है, लेकिन स्थानीय भाग (@ का बायां) हो सकता है कुछ भी डोमेन मालिक चाहता है। -> "foo@bar.com"@example.com <- एक वैध ईमेल पता है। - Stephen P


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

\S+@\S+

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


282



ईमेल भेजने के रूप में +1 और क्या होता है यह देखने के लिए एक ईमेल पता सत्यापित करने का एकमात्र वास्तविक तरीका है, एक साधारण रेगेक्स मैच से अधिक करने की आवश्यकता नहीं है। - kommradHomer
आप अभी भी इसे सरल रख सकते हैं लेकिन यह सुनिश्चित करने के लिए थोड़ा और कुछ करें कि इसमें "।" @ के बाद कहीं भी संख्याओं या अंकों के बाद, तो मेरे जैसे चीजें @ यहां, मुझे @ यहां @, और मुझे @ इरकॉम मान्य नहीं हैं ... ^ \ S + @ \ S + [\।] [0-9a-z ] + $ - Tim Franklin
मुझे लगता है कि ई-मेल पते में रिक्त स्थान हो सकते हैं। यह शायद उपयोग करने के लिए बेहतर है .+@.+ - Sam
/\S+@\S+/.test("áéíóúý@ÁÉÍÓÚÝð")  true - gtournie
@gtournie कोई परवाह नहीं करता है। ईमेल क्षेत्र में कोई भी प्रवेश करने वाला नहीं है गलती से, और यह सभी फ्रंट-एंड सत्यापन है: लोगों को गलती से गलत जानकारी दर्ज करने से रोकने के लिए, जैसे उनके नाम, ईमेल फ़ील्ड में। - meagar♦


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

<form><input type="email" placeholder="me@example.com">
    <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 >

यह आवश्यकता एक है जानबूझकर उल्लंघन आरएफसी 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])?)*$/

165



यह अच्छा है, लेकिन इसके साथ समस्या यह है कि यह एक के अंदर होना चाहिए form टैग और एक द्वारा प्रस्तुत submit इनपुट, जो हर किसी के पास करने की लक्जरी नहीं है। साथ ही, आप वास्तव में त्रुटि संदेश शैली नहीं बना सकते हैं। - Jason
मैंने नीचे एक उत्तर जोड़ा है जो आपको फ़ॉर्म से मुक्त करता है और जमा करता है। लेकिन हां, ब्राउज़र आमतौर पर केवल कुछ व्यवहार्यता जांच लागू करते हैं, न कि पूर्ण आरएफसी 822 सत्यापन। - Boldewyn
@ br1: यह अमान्य नहीं है क्योंकि कोई "ए" अपूर्ण डोमेन मौजूद नहीं है। क्या आपके इंट्रानेट में कुछ आईपी को हल किया गया है? - flying sheep
एचटीएमएल 5 ईमेल फ़ील्ड प्रकार उपयोगकर्ता @ ईमेल जैसे ईमेल स्वीकार करता है - Puce
यह सफारी में काम नहीं करता है - Mr Wilde


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

/^[^\s@]+@[^\s@]+\.[^\s@]+$/

यह निम्नलिखित प्रारूपों की अनुमति देता है:

1. prettyandsimple@example.com
2. very.common@example.com
3. disposable.style.email.with+symbol@example.com
4. अन्य .email-with-dash@example.com
9. #!$%&'*+-/=?^_`{}|~@example.org
6. "() []:,; @ \\\"! # $% और '* + - / =? ^ _ `{} | ~ ए "@ example.org
7. "" @ example.org (उद्धरण के बीच स्थान)
8. üñîçøðé@example.com (स्थानीय भाग में यूनिकोड वर्ण)
9. üñîçøðé@üñîçøðé.com (डोमेन भाग में यूनिकोड वर्ण)
10. Pelé@example.com (लैटिन)
11. δοκιμή@παράδειγμα.δοκιμή (ग्रीक)
12. 我 買 @ 屋企। 香港 (चीनी)
13. 甲 斐 @ 黒 川। 日本 (जापानी)
14. чебурашка@ящик-с-апельсинами.рф (सिरिलिक)

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


95



यह वही है जो मैं कर रहा हूं। ये सभी "जटिल" उत्तर समस्याएं उत्पन्न करते हैं: वे या तो पन्नी-कोड आईडीएन की अनुमति नहीं देते हैं या टीएलडी के एक निश्चित सेट का उपयोग नहीं करते हैं या अनावश्यक रूप से उपयोगकर्ता को [@ çμ.ö जैसे उनके ईमेल-उपसर्ग (पहले @) में वर्णों का उपयोग न करने के लिए प्रतिबंधित करते हैं। या डोमेन नाम। सामने के जावास्क्रिप्ट (कारण के बैकएंड उपयोग के लिए नहीं) सुरक्षा कारणों के लिए सत्यापन के लिए पर्याप्त नहीं है। तो क्यों न केवल उपयोगकर्ता को मूल टाइपो को रोकने में मदद करें। मूल टाइपो हैं: टीएलडी या उपयोगकर्ता-उपसर्ग (पहले @) या डोमेन-पार्ट या गलत टाइप भूल जाएं @ जैसा . (या ठीक इसके विपरीत)। कारणों से हमें सर्वर-साइड पर और अधिक प्रतिबंधक होना चाहिए। - Hafenkranich
कुछ अजीब कारणों से username@domain.com इस पैटर्न के साथ काम नहीं करता है - einstein
@ आइंस्टीन यह आपके उदाहरण से मेल खाता है: regex101.com/r/vX2eJ0/1 - Andrew
आपके regex के अनुसार "_.............. kamal@gmail.com" मान्य है, जो नहीं होना चाहिए! - Kamal Nayan
उदाहरण के साथ कहा गया रेगेक्स यहां दिया गया है, यदि आप इस समाधान के साथ टिंकर करना चाहते हैं: regex101.com/r/AzzGQU/2 - ryanm


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

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

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


76



यह समस्या पर पंसद करने का एक चालाक विचार है लेकिन यह काम नहीं करता है क्योंकि ब्राउज़र में भी गड़बड़ी की वैधता है। जैसे .@a के रूप में मान्य करता है true क्रोम, फ़ायरफ़ॉक्स और सफारी के मौजूदा संस्करणों में। - Hank
@ हेनरी जैक्सन दुर्भाग्यवश, इस मामले में हाँ। ऐसा इसलिए है क्योंकि आरएफसी के अनुसार एक वैध ई-मेल पता (सोच इंट्रानेट) है। यदि वे बहुत संकीर्ण मान्य होते हैं और झूठी नकारात्मकता उत्पन्न करते हैं तो ब्राउज़र ग्रिल हो जाएंगे। - Boldewyn
फीचर डिटेक्शन और सुन्दर गिरावट के लिए अपडेट किया गया है, अब यह नए ब्राउज़र पर नहीं टूटता है लेकिन आपको पसंद की किसी भी रेगेक्स का उपयोग करता है। - Ronny
अच्छा समाधान अफसोस की बात यह है कि यह केवल HTML5 + के लिए है। - Edward Olamisan
यह मूल प्रश्न के लिए अब तक का सबसे अच्छा समाधान है। हां, यह एचटीएमएल 5 का उपयोग करता है, लेकिन अधिकांश अनुप्रयोगों के लिए जो इस स्तर की सटीकता की आवश्यकता रखते हैं, वैसे भी निश्चित रूप से एचटीएमएल 5 पर किसी अन्य तरीके से भरोसा कर रहे हैं, इसलिए मूल बिंदु। हमारे लिए यह तय करना असंभव है कि किसी के ईमेल को वैसे भी सत्यापित करने के बिना वैध है, इसलिए हमें वास्तव में इसे सत्यापित करने में इतना समय या प्रयास नहीं करना चाहिए। किसी भी स्पष्ट वाक्यविन्यास या नाखुश प्रयास के लिए त्वरित जांच वह प्रयास है जो हमें खर्च करना चाहिए। - Woody Payne


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

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

63



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


यह सही आरएफसी 822 संस्करण है।

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

60



छी। यह काम कर सकता है, लेकिन यह बदसूरत है, क्या आपको नहीं लगता? - bgmCoder
फ़ंक्शन का 'फ़ॉर्म' यह दिखाने के लिए और अधिक है कि यह क्या करता है :-) - Bob van Luijt
RegExp ऑब्जेक्ट के साथ काम करने वाले संस्करण के लिए धन्यवाद। - Thomas
@ बीजीएम: क्या आप एक सुंदर काम करेंगे जो काम नहीं करता है? - Piskvor
@ बीजीएम: आगे बढ़ें और फिर संपादित करें। जवाब, आखिरकार, "समुदाय विकी" चिह्नित है। - Piskvor