我一直在使用HTML5的新输入类型来简化验证。我注意到一个问题(在Chrome上测试,但不确定其他浏览器)没有多大意义。如果我要将迈克尔放在我的电子邮件领域,它会说它需要是一个有效的电子邮件,太棒了,但是当我尝试michael @ test并且没有扩展时,它会正确验证。
我想知道的是,这是一个错误还是故意的?
我还想将此问题指出给将来使用它的人,并认为它可以100%运行。
幸运的是,我运行Laravel自己的电子邮件检查功能完美,但为什么Chrome或W3联盟的任何人都不知道这个问题?依靠这100%并认为人们使用此输入类型的有效电子邮件地址可能是一个很大的风险。
答案 0 :(得分:7)
michael@test
是有效的电子邮件地址,因为它的格式是有效的。有效的电子邮件地址自然并不意味着电子邮件地址能够接收消息,或者您的邮件守护程序甚至可以向其发送消息。
The W3C working group note on input type=email表示匹配条件是与以下正则表达式匹配的任何字符串:
/^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/
因此,^_^"@666.42.99-
也被该标准视为有效的电子邮件地址,但地址的主机部分显然无效。
不幸的是,没有其他方法可以肯定地和最终地验证电子邮件地址的有效性,但在那里发送验证消息并根据该消息的内容要求用户采取行动。
HTML 5验证仍然非常适合确保您没有在电子邮件字段中偶然输入您的电话号码或地址;但是任何客户端数据都应该被视为可能无效且不受信任,并且无论如何都要在服务器端重新检查。