什么是最不差的正则表达式来拒绝明确无效的电子邮件地址?

9

可能是重复问题:
如何在JavaScript中验证电子邮件地址?

我知道仅使用正则表达式无法验证电子邮件地址,但我认为我应该能够拒绝一些明显无效的电子邮件地址,以帮助那些不小心将其名称或密码输入电子邮件地址字段的友好用户。

因此,我不想拒绝任何有效的电子邮件地址,但我希望尽可能使用正则表达式拒绝尽可能多的无效电子邮件格式。但我想任何javascript/jquery/...也可以。

以下是我目前的代码:

^.+@.+\..+$

是的,没有真正验证的正则表达式,但应该有一些用于拒绝的。不,这不会阻止任何人输入虚假地址。是的,您仍然需要发送确认电子邮件以进行真正的验证。

上述正则表达式将从JavaScript中使用。

--

在.NET中,我会使用.NET来验证电子邮件格式。
    try
    {
      var mailAddress = new MailAddress(possibleMailAddress);
    }

如果一切正常,检查域名部分的DNS记录,看是否可能存在电子邮件服务器。只有当DNS记录明确表明没有电子邮件服务器或者不存在此类域名时,才会拒绝电子邮件地址。然后缓存一些结果以加快未来的查询速度。
尽管如此,我仍需发送确认电子邮件进行验证...

3
我认为你的正则表达式很合理。虽然有些地址中没有句点,但它们可能非常罕见。 - Tim Pietzcker
我认为这是一个针对公共网站非常合理的正则表达式。您可能还想考虑一下与此相关但不完全相同的问题“在Javascript中验证电子邮件地址?”的这个答案 - Adam Mihalcin
我认为如果你想要防止“假阴性”,这个正则表达式是可以的:^[^@]+@[^@\.]+(\.[^@\.]+)*$ 或者 ^.+?@[^@\.]+(\.[^@\.]+)*$ - Alvin Wong
你当前的正则表达式可能会允许这个:test@test@example.com - Alvin Wong
存在用于验证电子邮件地址的正则表达式。我在 Stack Overflow 上看到过一个链接,但我忘记了它。它是使用 Perl 正则表达式编写的,但由于 JavaScript 实现了 PCRE 的子集,因此可能可以重用它。 - nhahtdh
显示剩余2条评论
1个回答

6
官方标准RFC 2822描述了符合以下正则表达式的有效电子邮件地址的语法:
(?:[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])+)\])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接