Javascript 电子邮件地址验证的最佳实践(包括gmail地址中的+;)

Javascript 电子邮件地址验证的最佳实践(包括gmail地址中的+;),javascript,regex,validation,email-validation,Javascript,Regex,Validation,Email Validation,我知道这里有很多关于电子邮件验证和特定正则表达式的问题。我想知道关于使用用户名验证电子邮件的最佳实践是什么+anythingelse@gmail.comtrick()。我当前用于JavaScript验证的RegExp如下所示,但它不支持句柄中额外的+: /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/ 是否有其他服务支持额外的+?我应该允许在地址中使用+,还是应该修改RegEx,使其仅允许使用gmail.com或googl

我知道这里有很多关于电子邮件验证和特定正则表达式的问题。我想知道关于使用
用户名验证电子邮件的最佳实践是什么+anythingelse@gmail.com
trick()。我当前用于JavaScript验证的RegExp如下所示,但它不支持句柄中额外的
+

/^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/
是否有其他服务支持额外的
+
?我应该允许在地址中使用
+
,还是应该修改RegEx,使其仅允许使用
gmail.com
googlemail.com
作为域的电子邮件?如果是这样,修改后的正则表达式是什么

更新: 感谢大家指出,
+
根据规范是有效的。我不知道这一点,现在为将来做。对于那些说使用正则表达式来验证它是不好的人,我的理由完全是基于我正在构建的一个创造性设计。我们客户的设计在电子邮件地址输入的旁边放置了一个绿色的复选框或一个红色的X。该图标指示它是否是有效的电子邮件地址,因此我必须使用一些JS来验证它。

+
是电子邮件地址中的。域名不是gmail.com还是googlemail.com并不重要

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

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

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

如果需要通过正则表达式验证电子邮件,则至少是这样

标准建议使用此regexp:

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

如果这没有吓倒你,那应该是:)

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

规范允许使用一些非常丑陋的电子邮件地址。我经常对网站非常恼火,甚至抱怨完全正常、有效的电子邮件地址,所以请不要拒绝有效的电子邮件地址。与其拒绝合法地址,不如接受一些非法地址

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


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

关于这个主题的一篇非常好的文章

我想知道什么是处理电子邮件地址验证的最佳方法。我想他的意思是,最好使用经过验证、测试的库,而不是使用自己的正则表达式。ApacheCommons就是这样一个库的Java示例。看他指的是电子邮件的格式吗?或者电子邮件的有效性?我想说的不仅仅是“这不是一个很好的方法”:从数学上讲,用正则表达式验证(所有可能的)电子邮件地址是不可能的。定义电子邮件地址格式的语法是Type2 Chomsky语法,RegEx只能处理Type3 Chomsky语法:当它是电子邮件标准的一部分时,这几乎不是一个技巧。不要将RegEx用于电子邮件验证,而要捕获明显的键入错误。只需向用户发送一封带有“激活”链接的电子邮件。没有用于电子邮件验证的傻瓜日志正则表达式。至少没有一张适合A4纸,即使是用小而可读的字体打印;-)()@ ToLaCH,我认为如果不是所有的电子邮件服务都支持这种方式,那就是在“代码> > +代码>之后的部分,不管是在代码< > +代码>之后的哪个部分,把电子邮件发送到句柄的第一部分,我甚至不知道这是标准的一部分。不幸的是,我们正在从一个创意公司建立一个网站,在你模糊输入字段后,在电子邮件行旁边放一个复选框或x。这个创造性的方面需要在blur上进行JS验证。这将拒绝我的电子邮件地址,其中@前面的部分只是一个*字符。电子邮件地址是有效的。从你链接到的文章中可以看到:“不要盲目地从在线库或论坛复制正则表达式。”而且,这个正则表达式仍然没有完全符合规范。@Aaron谢谢,这很可怕。我要假装我以前从未见过这些——尤其是编码字符!汤加政府没有理由不能将
MX
条目添加到
ccTLD,制作一个地址,如
mcv@to
实际有效的电子邮件地址。他们已经有一个运行在
http://to
(对于URI缩短服务),因此这当然不是不现实的。