7

我知道这里有很多关于电子邮件验证和特定 RegEx 的问题。我想知道验证电子邮件的最佳实践是什么username+anythingelse@gmail.com这里有详细信息)。我当前用于 JavaScript 验证的 RegExp 如下,但它不支持+句柄中的额外内容:

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

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

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

4

5 回答 5

11

+是电子邮件地址中的有效字符。域不是 gmail.com 或 googlemail.com 无关紧要

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

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

作为此正则表达式如何不根据规范验证的示例:..@-.com根据它,电子邮件是有效的。

于 2009-12-09T14:04:35.337 回答
5

如果您需要通过正则表达式验证电子邮件,请阅读标准或至少阅读这篇文章

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

(?:[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])+)\])

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

于 2009-12-09T14:09:10.773 回答
3

我倾向于使用 /.+@.+\..+/ 来检查简单的错误。然后我会向该地址发送一封电子邮件以验证它是否确实存在,因为大多数拼写错误仍会导致语法上有效的电子邮件地址。

于 2009-12-09T14:11:00.477 回答
2

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

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

*编辑:从正则表达式的域部分中删除了点,因为a@to它仍然是一个有效的电子邮件地址。因此,即使是我的超级简化验证也拒绝了有效地址。仅接受包含 @ 前后的所有内容有什么缺点吗?

于 2009-12-09T14:38:54.063 回答
1

关于这个主题的一篇非常好的文章我知道如何验证电子邮件地址,直到我阅读了 RFC

于 2010-07-01T07:46:52.410 回答