如何在Javascript和PHP中验证非英语(UTF-8)编码的电子邮件地址?

Lar*_*eep 10 javascript php email utf-8 internationalization

我目前正在处理的网站的一部分包含用户必须提供其电子邮件地址的注册过程.就在最近,我意识到基于非ascii的域是可能的(电子邮件也是如此).我的后端是utf-8编码的MySQL,我期待任何用户(具有不同的语言环境)应该能够输入他们的电子邮件,但不知道如何验证这种电子邮件地址.

目前我正在测试jquery工具,它正确验证了英文电子邮件地址,但未能验证非ascii电子邮件.另外我需要在服务器端用php做同样的事情.是否有正则表达式可以验证此类电子邮件地址?

我试过这个,但它在jquery工具中失败了(这只是演示的例子,我也不明白)

闪闪发光@闪闪发光.COM

当他们用他们自己的IME键入他们的英文电子邮件地址(jonesmith@somemail.com)时会发生什么.这可以通过我们用于英文邮件验证的当前正则表达式进行验证.目前我不必担心该电子邮件是否存在.

谢谢

小智 14

尝试验证电子邮件地址可能不是一个好主意.规范(RFC5321,RFC5322)允许这么大的灵活性,用正则表达式验证它们实际上是不可能的,并且使用函数进行验证是一项很大的工作.结果是大多数电子邮件验证方案最终拒绝大量有效的电子邮件地址,这很大程度上是因为用户的不便.(到目前为止,最常见的例子是不允许+角色.)

用户更可能(意外地或故意地)输入错误的电子邮件地址而不是无效的电子邮件地址,因此实际验证是非常有益的大量工作,如果你做错了可能会花费成本.

我建议您只检查@客户端是否存在字符,然后发送确认电子邮件进行验证; 这是最实用的验证方式,它确认地址也是正确的.

  • 虽然技术上正确,但使用正则表达式来验证电子邮件是不可能的,但作为一般解决方案,我不能不同意这个答案.在大多数**真实世界**(非理论)应用程序中,您将相关的电子邮件地址存储在数据库中,和/或将来对其进行一些操作.允许任何旧的UTF-8字符串无阻碍地传递给数据层是一个糟糕的想法.我宁愿拒绝一些"离墙"有效的电子邮件地址,而不是有100%的机会进行聪明的注射攻击.在现实世界中,"hi"\〜e ^ ery!@ myhost`不会经常出现. (3认同)