电子邮件地址验证的最佳做法(包括Gmail中的+地址)
我知道这里有很多关于电子邮件验证和特定RegEx的问题。我想知道哪些最佳做法是用于验证有关[email protected]
技巧的电子邮件(details here)。我对JavaScript验证当前的正则表达式如下所示,但它不支持额外的+
手柄:电子邮件地址验证的最佳做法(包括Gmail中的+地址)
/^([a-zA-Z0-9_.-])[email protected](([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/
是否有支持额外+
任何其他服务?我应该允许在地址中使用+
,还是应该将RegEx更改为仅允许将gmail.com
或googlemail.com
作为域的电子邮件地址?如果是这样,RegEx会改变什么?
更新: 感谢大家指出+
是根据规范有效。我不知道这一点,现在做未来。对于那些说甚至使用RegEx来验证它的人来说,我的理由完全基于我正在创建的创意设计。我们客户的设计在模糊的电子邮件地址输入旁边放置了绿色的支票或红色的X.该图标表示它是否是有效的电子邮件地址,因此我必须使用一些JS来验证它。
+
是电子邮件地址中的valid character。不要紧,如果该域不是gmail.com或googlemail.com
正则表达式实际上不是一个非常好的验证电子邮件的方式,但如果您只是想修改您的正则表达式来处理加号,请更改它为以下内容:
/^([a-zA-Z0-9_.-\+])[email protected](([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/
作为如何这个表达式不验证对规范的例子:电子邮件[email protected]
根据它是有效的。
我会好奇什么是最好的处理电子邮件地址验证。 – Zoidberg 2009-12-09 14:05:26
我想他的意思是使用经过验证的测试库比使用自己的正则表达式更好。这种库的一个Java例子是Apache Commons。 – 2009-12-09 14:07:42
请参阅http://stackoverflow.com/questions/3232/how-far-should-one-take-e-mail-address-validation – 2009-12-09 14:08:58
如果需要通过正则表达式验证电子邮件,则需要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])+)\])
如果不吓唬你,它应该:)
从您链接到的文章:“不要盲目复制在线图书馆或讨论论坛的正则表达式。”此外,这个正则表达式_still_没有完全验证规范。 – 2009-12-09 14:10:21
@Aaron谢谢,这非常可怕。我会假装以前从未见过 - 特别是编码字符! – 2009-12-09 14:21:45
我倾向于去与沿东西线/[email protected] 。+ \ .. + /检查简单的错误。然后,我会发送一封电子邮件到地址,以确认它确实存在,因为大多数拼写错误仍然会导致语法上有效的电子邮件地址。
该规范允许一些非常疯狂的丑陋电子邮件地址。我经常非常恼火的网站,甚至抱怨完全正常,有效的电子邮件地址,所以请尽量不要拒绝有效的电子邮件地址。接受一些非法地址比拒绝合法地址更好。
像其他人一样,我会用一个简单的正则表达式像/[email protected]+/然后发送验证邮件。如果验证足够重要,验证是非常重要的,因为合法的电子邮件地址仍然可以属于除访问者以外的其他人。或者包含一个意想不到的但致命的错字。
*编辑:从正则表达式的域部分删除点,因为[email protected]
仍然是一个有效的电子邮件地址。所以即使我的超级简化验证拒绝了有效地址。是否有任何缺点只是接受所有包含@的东西在前面和后面?
汤加政府没有理由不能为'ccTLD'添加一个'MX'条目,使得诸如'mcv @'之类的地址成为实际的工作电子邮件地址。他们已经在'http:// to'上运行了一个web服务器(对于一个URI shortener服务),所以这当然不是不现实的。 – 2009-12-09 15:48:56
这是很难一招时,它的电子邮件标准的一部分,一个非常不错的文章。 – tloach 2009-12-09 14:06:12
请勿使用RegEx进行电子邮件验证,除了捕获明显的错误类型。只需向用户发送带有“激活”链接的电子邮件。没有用于电子邮件验证的foolproog正则表达式。至少没有一张适合A4纸,即使以小而易读的字体打印;-)(http://www.regular-expressions.info/email.html) – Duroth 2009-12-09 14:07:57
@tloach我认为这是一个骗局如果不是所有的电子邮件服务都支持这种方式,那么无论'+'后面的部分如何,都会将电子邮件发送到句柄的第一部分 - 我甚至不知道它是标准的一部分。 – 2009-12-09 14:11:52