नेत्रहीन रूप से स्वीकार नहीं करने के लिए ईमेल को मान्य करने के लिए सबसे सरल नियमित अभिव्यक्ति क्या है? [बन्द है]


80

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

मैं एक पुष्टि भेजूंगा, एक तरह से हैंडशेक सत्यापन करने के लिए

मैं कुछ सरल की तलाश कर रहा हूं , सबसे अच्छा नहीं, लेकिन बहुत सरल नहीं है जो कुछ भी मान्य नहीं करता है। मैं नहीं जानता कि सीमा कहाँ होनी चाहिए, क्योंकि कोई भी नियमित अभिव्यक्ति सही सत्यापन नहीं करेगी क्योंकि नियमित अभिव्यक्ति के साथ ऐसा करना संभव नहीं है।

मैं नियमित अभिव्यक्तियों के लिए निहित सिंटैक्स और दृश्य जटिलता को सीमित करने की कोशिश कर रहा हूं, क्योंकि इस मामले में कोई भी सही होगा।

मैं क्या करने के लिए regexp का उपयोग कर सकता हूं?


सोचा था कि "सरल" वास्तव में "सर्वश्रेष्ठ" के रूप में के रूप में व्यक्तिपरक था, paribus Ceteris, और कहा कि धागा regexes के एक cornucopia था, लेकिन आपको लगता है यदि ऐसा है तो ... कंधे उचकाने की क्रिया
मिहाई Limbăşan

यदि आप एक regex सत्यापन करते हैं तो अभिव्यक्ति को कुछ सरल क्यों सीमित करते हैं? चलो कुछ अच्छा उपयोग करते हैं, इससे बेहतर परिणाम प्रदान करने वाले आपके कोड पर कोई प्रभाव नहीं पड़ेगा।
21

आपके आवेदन में यह मान्यता कहाँ होगी? पोस्ट पर? आप सैनिटाइज़िंग इनपुट के लिए क्या कर रहे हैं?
ब्रिअम

^ ^? i) [A-Z0-9 + _-]] + @ (?:। *।)।: (? *। *) $, ^ denotes start, $ denotes end, (?) केस असंवेदनशील मिलान। @ से पहले केवल अल्फ़ान्यूमेरिक, '+', '_', '-' की अनुमति दें। यह एक ;: कोई आंशिक मैच उपसमूह गठन के लिए, केवल 1 पूर्ण मैच
पी सतीश पात्रो

जवाबों:


99
^\S+@\S+$

3
यह अमान्य पते से मेल खाएगा। कोई भी रेगेक्स, लेकिन यह आम मिस-स्पेलिंग जैसे टेस्ट @ stackoverflow..com से मेल खाएगा (डबल डॉट्स पर ध्यान दें।) कृपया एक बेहतर उदाहरण प्रदान करें।
मिहाई लिम्बोअन

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

2
+1। यह वैसे भी एक व्यक्तिपरक प्रश्न है, और यह सरल है।
जेसन कोहेन

2
हाँ, यदि आप पूर्ण सत्यापन रेगेक्स का उपयोग नहीं करना चाहते हैं, तो यह एक अच्छा सरल सन्निकटन है
रैंपियन

8
+1 regex के माध्यम से पूरी तरह से ई-मेल पते को "सत्यापित" करने की कोशिश करना एक मूर्खता है। यह सबसे सरल गलत प्रकारों को पकड़ने के लिए काम करता है; बाकी मेल भेजने की कोशिश करके पाया जा सकता है। उपरोक्त भी यूनिकोड (-> पनीकोड) डोमेन को अनुमति देता है, जहां अधिकांश "चतुर" रेगीक्स इसे विफल करते हैं।
बोबिन्स

239

एक नियमित अभिव्यक्ति लिखना संभव है जो मानकों का पालन करने वाले ईमेल पते को ही स्वीकार करता है। हालांकि, कुछ ईमेल पते हैं जो मानकों का कड़ाई से पालन नहीं करते हैं, लेकिन फिर भी काम करते हैं।

यहाँ बुनियादी सत्यापन के लिए कुछ सरल नियमित अभिव्यक्तियाँ दी गई हैं:

इसमें एक @ वर्ण शामिल है:

@

इसमें @ और इसके बाद की अवधि शामिल है:

@.*?\.

@ से पहले, अवधि से पहले और उसके बाद कम से कम एक वर्ण है:

.+@.+\..+

केवल एक @ है, कम से कम एक चरित्र @ से पहले, अवधि से पहले और उसके बाद:

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

व्हॉट्सएप को खत्म करने के लिए यूजर अमीबा मैन 17 में यह संशोधन सुझाता है:

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

और केवल एक अवधि स्वीकार करने के लिए:

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

7
यदि आप RFC 6531 के साथ पाइप के नीचे आ रहे हैं पर एक नज़र डालते हैं और यदि आप RFC 3696 पर एक नज़र डालते हैं, तो आप शायद इस निष्कर्ष पर पहुँचेंगे कि ईमेल को मान्य करने का एकमात्र तरीका एक पुष्टिकरण ईमेल भेजना है। मुझे लगता है कि ईमेल पतों पर रेगेक्स का उपयोग करने के साथ वास्तविक फोकस उपयोगकर्ता को टाइपो को रोकने में मदद करने के साथ होना चाहिए और यहीं सरल रीगेक्स इस तरह के खेल में आते हैं।
बॉब बार्कर

बिल्कुल सही, @ अमीबा मैन 17। RegEx ईमेल पते के प्रारूप को मान्य कर सकता है, यह ईमेल पते की सामग्री को मान्य नहीं कर सकता है । उस ने कहा, तुम्हारा प्रारूप पूरी तरह से मान्य है। ईमेल को भेजना सामग्री को मान्य करने का एकमात्र तरीका है।
क्रेग

पर काम नहीं करेगा test@test.com?
अब्दुल हमीद ने

1
एक अवधि के साथ स्ट्रिंग को समाप्त होने से रोकने के लिए, मैंने यह संशोधन किया: ^ [^ @ \ _ s] + @ [@ @ \ _ s] + \ _ [^ @ \ _ \ _] + $
fyrite

1
हाँ, पिछले एक का उपयोग न करें। यह बहुत सारे वैध विकल्पों से मेल नहीं खाता है। उदाहरण के लिए me@provider.co.uk।
s.meijer

7

^ [a-zA-Z0-9 _। + -] + @ [a-zA-Z0-9 - -] +। [a-zA-Z0-9 -] + $

  • केवल 1 @
  • कई डोमेन और उप डोमेन

3

मुझे लगता है कि AmoebaMan17 द्वारा अभिव्यक्ति के लिए इस छोटे से मोड़ को पता को एक डॉट के साथ शुरू / समाप्त होने से रोकना चाहिए और एक दूसरे के बगल में कई डॉट्स को भी रोकना चाहिए। एक आम मुद्दे को खत्म करते हुए इसे फिर से जटिल नहीं बनाने की कोशिश की जा रही है।

(?!.*\.\.)(^[^\.][^@\s]+@[^@\s]+\.[^@\s\.]+$)

यह काम करता प्रतीत होता है (लेकिन मैं कोई रेग-पर्ट नहीं हूं)। उपयोगकर्ताओं को एक अवधि के साथ समाप्त होने वाले वाक्यों के अंत से ईमेल पते कॉपी और पेस्ट करने के साथ मेरी समस्या को हल करता है।

यानी: यहाँ मेरा नया ईमेल पता है tabby@coolforcats.com।



<script> सतर्क ('hello') </ script> @ hello.com इस regex के अनुसार मान्य है। ठीक नहीं लगता।
dudedev

1

अपना चयन ले लो।

यहाँ एक है जो RFC 2822 धारा 3.4.1 का अनुपालन करता है ...

(?:[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])+)\])

बस मामले में आप उत्सुक हैं। :)


7
बस किसी को भी अब यह देख के लिए एक नोट: यह RFC 2822 का अनुपालन नहीं करता
porges

11
और यह आसान नहीं है, या तो :)
दान डिप्लो

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