电子邮件地址验证的最佳做法(包括gmail地址中的+)

时间:2009-12-09 14:00:56

标签: javascript regex validation email-validation

我知道这里有很多关于电子邮件验证和特定RegEx的问题。我想知道有关使用username+anythingelse@gmail.com技巧(details here)验证电子邮件的最佳做法。我当前的RegExp for JavaScript验证如下,但它不支持句柄中的额外+

/^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/

是否还有其他支持额外+的服务?我应该在地址中允许+,还是应该更改RegEx以仅允许其使用gmail.comgooglemail.com作为域名的电子邮件?如果是这样,会有什么改变的RegEx?

更新 感谢大家指出+符合规范。我不知道,现在为未来做。对于那些说甚至使用RegEx来验证它的人来说,我的理由完全基于我正在构建的创意设计。我们的客户的设计在电子邮件地址输入旁边放置绿色支票或红色X,以模糊它。该图标表示它是否是一个有效的电子邮件地址,因此我必须使用一些JS来验证它。

5 个答案:

答案 0 :(得分:11)

+是电子邮件地址中的valid character。域名不是gmail.com或googlemail.com

并不重要

正则表达式实际上并不是验证电子邮件的好方法,但如果您只想修改正则表达式来处理加号,请将其更改为以下内容:

/^([a-zA-Z0-9_.-\+])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/

作为此正则表达式未针对规范进行验证的示例:电子邮件..@-.com根据它有效。

答案 1 :(得分:5)

如果您需要通过regexp验证电子邮件,请read the standard或至少this article

该标准建议使用此正则表达式:

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

如果这不会吓到你,它应该:)

答案 2 :(得分:3)

我倾向于选择/.+@.+\..+/之类的东西来检查简单的错误。然后我会发送一封电子邮件到该地址,以验证它确实存在,因为大多数拼写错误仍然会产生语法上有效的电子邮件地址。

答案 3 :(得分:2)

规格允许一些非常疯狂的丑陋电子邮件地址。我经常对网站感到非常恼火甚至抱怨完全正常,有效的电子邮件地址,所以请尽量不要拒绝有效的电子邮件地址。接受一些非法地址比拒绝合法地址更好。

正如其他人所建议的,我会使用像/.+@.+/这样的简单正则表达式然后发送验证邮件。如果验证非常重要,那么验证是非常重要的,因为合法的电子邮件地址仍然可以属于访客以外的其他人。或者包含一个意想不到但致命的错字。

*编辑:从正则表达式的域部分删除了点,因为a@to仍然是有效的电子邮件地址。所以即使我的超简化验证也拒绝了有效地址。是否有任何缺点只是接受包含@的东西在前面和后面的东西?

答案 4 :(得分:1)