输入type =“ email”允许test @ test,为什么?


10

我一直认为浏览器email-validation-regex比JS / PHP中的某些regex模式更健壮。

我的雇主刚刚告诉我,两个字符串都被认为是正确的(最后在FF28中):

test@test.com // Expected to be true, is true
test@test     // Expected to be false, is true

为什么后者是正确的?这是错误,还是将来的事情?因为据我所知,不使用扩展(除了本地主机)是不正确的。

任何人都可以对此有所了解吗?


2
“除了本地主机”-浏览器如何区分?
MrWhite

1
此外,我认为这<input type="email" />仅对移动网站有用,因此大多数键盘会以适当的显示方式显示(带有@键和一些.com快捷键……)。
RichouHunter 2014年

我不知道,我不构建浏览器:)可能是一个聪明的把戏,或者您可以添加一些设置pattern
Martijn 2014年

6
那是一个非常有效的地址,为什么会被拒绝呢?
约尔格W¯¯米塔格

1
因为test@test是一个有效的电子邮件地址...它把test一个tld。就像test@comcomtld 的有效电子邮件地址一样... tools.ietf.org/html/rfc2822#section-3.4.1
SnakeDoc

Answers:


20

这是有效的,因为它test可能是顶级域,并且localpart@top-level-domain是有效的电子邮件地址。

例如查看电子邮件地址,域部分


而且,由于ICANN现在有一个程序(任何人都足够大)来申请他们所选择的TLD,因此使电子邮件验证程序拒绝test成为TLD的想法不再可行,因为它恰好尚未注册。
史蒂夫·杰索普

1
@SteveJessop此外,OP还没有指定他是在说句法有效性(即使未注册该电子邮件也将是有效的)还是在说要检查电子邮件是否有效(在这种情况下,还需要更多)。 。
利玛窦

不检查它是否存在,令我惊讶的是不需要域扩展。这将使浏览器验证的效率大大降低,因为仅需键入asd @ ads即可通过。
Martijn 2014年

5
@Martijn:“浏览器验证”只是第一行验证检查(很容易被绕开),因此它需要是最广泛的检查。最终的“严格”验证仍然需要在服务器端逻辑中进行。
MrWhite

3

您可以编辑主机文件或在本地网络上运行DNS服务器以创建具有顶级域名的计算机。仅在该本地网络内路由电子邮件地址时,才可以访问该电子邮件地址,但这是可能的配置。


2

另请注意,不需要 Web浏览器执行任何验证检查。较旧的浏览器对电子邮件地址无特殊要求。较新的浏览器可能会验证,但是“电子邮件”类型在可能向用户显示专用键盘的移动设备上最有用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.