HTML5 फॉर्म-सत्यापन बिना डॉट के ईमेल की अनुमति क्यों देता है?


112

मैं कुछ HTML5 फॉर्म-सत्यापन प्रदर्शित करने के लिए एक बहुत ही सरल मॉक-अप लिख रहा हूं। हालाँकि, मैंने देखा कि ईमेल सत्यापन पते में एक डॉट के लिए जाँच नहीं करता है, और न ही यह कहा गया है कि निम्नलिखित बिंदुओं के लिए जाँच करता है।

दूसरे शब्दों में, "जॉन @ डो" को वैध माना जाता है, जब यह स्पष्ट रूप से मान्य ईमेल पता नहीं है; "डो" एक डोमेन नहीं है।

यह है कि मैं अपने ईमेल क्षेत्र को कैसे कोडित कर रहा हूं:

<input type="email" required />

क्या यह पर्याप्त नहीं है?

इस फिडेल को देखें कि मेरा क्या मतलब है।

नोट: मुझे पता है कि इसके बजाय एक RegEx पैटर्न के माध्यम से इसे कैसे पूरा किया जाए। मैं सिर्फ यह सोच रहा हूं कि कोई व्यक्ति ईमेल प्रकार का उपयोग करने के साथ कैसे दूर हो सकता है।


10
In other words, "john@doe" is considered valid, when it's clearly not a valid email address; doe isn't a domain.हां, doeनिश्चित रूप से एक डोमेन (सोच localhost) हो सकता है, और यह पता तकनीकी रूप से प्रति मान्य है।
दाखिला लिया

2
@admdrew हेह ... यह एक दिलचस्प मामला होगा, यदि आप स्वयं मेल करने वाले से एक ई-मेल भेज रहे हैं, और "दोस्त @ लोकलहोस्ट" लिखने का फैसला करें
कटाना 314

@ कटान ३१४ - हे, युप। अधिकांश (अच्छी तरह से कॉन्फ़िगर किए गए) मेलस्वेर्स उन संदेशों को अस्वीकार कर देंगे जो उन पते पर भेजे जा रहे हैं जो एक अपेक्षित डोमेन से मेल नहीं खाते हैं, इसलिए आम तौर पर बोलना localhostपते के साथ कोई समस्या नहीं है ।
प्रशंसा की

जवाबों:


83

क्योंकि @ b एक वैध ईमेल पता है (जैसे कि स्थानीयहोस्ट एक वैध डोमेन है)। Http://en.wikipedia.org/wiki/Email_address#Examples देखें

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


7
धन्यवाद। मैं अभी यह नहीं देखता कि कोई भी कंपनी इस आउट-ऑफ-बॉक्स ईमेल सत्यापन से कैसे लाभान्वित हो सकती है। फ़ेसबुक किसी को साइन-अप w / a @ b एड्रेस नहीं करने देता। हालांकि जानकारी के लिए धन्यवाद। (मैंने आपके उत्तर को
अस्वीकार

6
सार्वजनिक पहुंच वाली फेसबुक जैसी वेबसाइटों के मामले में इसका कोई फायदा नहीं है। लेकिन आंतरिक वेबसाइटों के बारे में सोचो। आप joe @ सहायता को लिखना चाह सकते हैं। लेकिन मुझे यह भी लगता है कि यह न्यूनतम उपयोग का है। फिर भी, वेब ब्राउज़र मानकों (यानी RFC) के आधार पर लागू करने के लिए हैं, न कि सबसे सामान्य मामलों पर आधारित।
अली अलवी

9
मुझे आश्चर्य है कि जब पिछली बार किसी ने वास्तव में लोकलहोस्ट को एक ईमेल भेजा था!
मैथ्यू लॉक

2
कम से कम काम कर रहे ईमेल पतों की एक sidenote एक (के रूप में recordsetter.com/world-record/shortest-email-address/4327 ) हैau@ua
Kyborek

132

आप सैद्धांतिक रूप से "" के बिना एक पता दे सकते हैं। में।

तकनीकी रूप से चीजें जैसे:

user@com
user@localserver
user@[IPv6:2001:db8::1]

क्या सभी वैध ईमेल हैं।

तो मानक HTML5 सत्यापन सभी वैध ई-मेलों के लिए अनुमति देता है, जिसमें असामान्य भी शामिल हैं।

स्पष्टीकरण पढ़ने के लिए कुछ आसान (मानकों के माध्यम से पढ़ने के बजाय): http://en.wikipedia.org/wiki/Email_address#Examples


1
सहमत, यह 'क्यों' का जवाब देता है, 'समाधान' का नहीं। मैं भी क्यों उत्सुक था। अब मैं "ठीक करना" नहीं जानता।
एलेनोर ज़िमरमैन

पहले प्रकार का एक उदाहरण डोमेन है uz, जो सीधे आईपी 2018 के रूप में एक आईपी को इंगित करता है। यदि आप एक करते हैं , तो यह nslookup uzइंगित करता है 91.212.89.8, इसलिए इस डोमेन पर भी ईमेल होना संभव है।
पल्सजेट

36

इसे इनपुट में जोड़ने का प्रयास करें

pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,63}$"

बेला


2
बहुत सारे नए डोमेन उपलब्ध हैं (लेखाकार [11], अंतर्राष्ट्रीय [13] आदि) और 63 की संभावित अधिकतम लंबाई रेगेक्स पैटर्न की लंबाई {2, 63} होनी चाहिए।
unasAquila

42
-1। सबसे पहले, आपने यह समझाने की कोशिश नहीं की है कि यह क्या अनुमति देता है या प्रतिबंधित करता है, न ही कोई ऐसा नियम क्यों चाहेगा। दूसरे, यह मानकों के परमिट की तुलना में कहीं अधिक प्रतिबंधात्मक है (मैं मानकों को पढ़ने और टटोलने का नाटक नहीं करूंगा, लेकिन उदाहरण के लिए, en.wikipedia.org/wiki/Email_address#Internationalization या Stack पर कई ईमेल सत्यापन प्रश्न देखें। अजीब ईमेल पते के उदाहरण के लिए अतिप्रवाह)। क्यो ऐसा करें? यदि कोई व्यक्ति अपने ईमेल के रूप में कुछ असामान्य दर्ज कर रहा है, तो बस इसे स्वीकार करें - संभावना है कि वे आपसे बेहतर जानते हैं।
मार्क अमेरी

7
वास्तव में, मैं कहूंगा कि "संभावनाएं" हैं कि वे एक गलती कर रहे हैं। यह / हो सकता है / हो सकता है कि उनके पास एक बहुत ही असामान्य ईमेल पता हो, लेकिन मैं कहता हूं कि आप एक गलत ईमेल के स्थान पर एक सही ईमेल पता प्राप्त करेंगे, यदि आप इसे पास करने से रोकने के लिए सत्यापन और संकेत दे रहे हैं उपयोगकर्ता की जाँच करने के लिए।
ज्योफ केंडल

1
यह एक ^ होना चाहिए, इसे दर्शाते हुए इसे स्ट्रिंग की शुरुआत से मेल ^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]+$
खाना

13

RFC 822 , अध्याय 6, संवर्धित बैकस-नौर फॉर्म (BNF) में एक पता के विनिर्देश देता है:

addr-spec   =  local-part "@" domain
local-part  =  word *("." word)
domain      =  sub-domain *("." sub-domain)

इस विनिर्देश a@bका उपयोग करना एक वैध पता है।

अपडेट करें

तर्जका की टिप्पणी का उत्तर देने के लिए, मैं निम्नलिखित परिभाषाएँ जोड़ता हूँ। हम देखते हैं कि SPACE की अनुमति है लेकिन केवल उद्धृत स्ट्रिंग में।

word          =  atom / quoted-string
atom          =  1*<any CHAR except specials, SPACE and CTLs>
quoted-string = <"> *(qtext/quoted-pair) <">
SPACE         =  <ASCII SP, space>
CTL           =  <any ASCII control character and DEL> 
qtext         =  <any CHAR excepting <">, "\" & CR, and including linear-white-space>
quoted-pair   =  "\" CHAR  

OTOH, RFC 822 भी मुझे लोकल-पार्ट में स्पेस डालने की अनुमति देता है, जो क्रोम कम से कम अनुमति नहीं देता है, इसलिए मुझे यकीन नहीं है कि वे संदर्भ के रूप में RFC का उपयोग करते हैं। (भले ही उन्हें होना चाहिए!)
तर्जुक

8

इस MDN पृष्ठ पर यह बताता है कि regex ब्राउज़रों को ईमेल को मान्य करने के लिए उपयोग करना चाहिए:

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email#Validation

आप डोमेन नाम में कम से कम एक डॉट की आवश्यकता के लिए इस regex को थोड़ा बदल सकते हैं: *regex के अंत में स्टार को प्लस में बदल दें +। फिर उस रेगेक्स को patternविशेषता के रूप में उपयोग करें :

<input type="email" pattern="^[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])?)+$"></input>

3

आप ईमेल फ़ील्ड के पैटर्न को कस्टमाइज़ कर सकते हैं:

input:valid {
  border-color: green
}

input:invalid {
  border-color: red
}
Email:
<input type="email" required value="a@b.c" /><br>

Non-dots Email:
<input type="email" required pattern="[^.]+@[^.]+" value="a@b.c" />


2

यहां बताया गया है कि आप रेगेक्स पैटर्न का उपयोग करके html5 के साथ कैसे कर सकते हैं। आप प्रदर्शित करने के लिए एक कस्टम संदेश भी शामिल कर सकते हैं।

<form>
  <input type="email" value="paul@test" required pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,63}$" title="Hey, you are missing domain part in the email !!!"/>
  <button type="submit">Click Me</button>
</form>


-5

यह पैटर्न हमेशा मेरे लिए काम करता है।

पाठ को लोअरकेस में होना चाहिए, pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$"लेकिन मुझे लगता है कि यह कम या ज्यादा ईमेल को कवर करता है।

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