为什么HTML5表单validation允许没有点的电子邮件?

我正在编写一个非常简单的模型来演示一些HTML5表单validation。 但是,我注意到电子邮件validation不会检查地址中的点,也不会检查所述点之后的字符。

换句话说,“john @ doe”被认为是有效的,当它显然不是一个有效的电子邮件地址; “doe”不是一个域名。

这是我编码我的电子邮件字段:

<input type="email" required /> 

这是不够的?

检查这个小提琴 ,看看我的意思。

注意:我知道如何通过RegEx模式来完成此操作。 我只是想知道如何有人可以逃避使用电子邮件types。

因为@ b是一个有效的电子邮件地址(例如本地主机是一个有效的域名)。 请参阅http://en.wikipedia.org/wiki/Email_address#Examples

另外,请记住,您应该始终在服务器上进行inputvalidation。 客户端validation应该只是为了给用户反馈,而不是依赖,因为它可以很容易地被绕过。

你理论上可以有一个没有“。”的地址。 在。

由于技术上的事情如:

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

都是有效的电子邮件。

所以标准的HTML5validation允许所有有效的电子邮件,包括不常见的电子邮件。

对于一些容易阅读的解释(而不是阅读标准): http : //en.wikipedia.org/wiki/Email_address#Examples

尝试添加到input

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

小提琴

RFC 822第6章给出了扩展Backus-Naurforms(BNF)中地址的规范:

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

使用这个规范a@b是一个有效的地址。

UPDATE

为了回答Trejkaz的评论,我添加了下面的定义。 我们看到SPACE是允许的,但只能在引用的string中。

 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 

您可以自定义电子邮件字段的模式:

 input:valid { border-color: green } input:invalid { border-color: red } 
 Email: <input type="email" required value="a@bc" /><br> Non-dots Email: <input type="email" required pattern="[^.]+@[^.]+" value="a@bc" /> 

这种模式总是适合我。

文字必须以小写字母pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[az]{2,}$"但我认为它涵盖了或多或less大多数电子邮件。