有效和无效的电子邮件地址的正则表达式

时间:2013-12-02 16:12:48

标签: javascript php regex

我正在寻找一些正则表达式来匹配有效的电子邮件(不需要是一些与RFC兼容的工作)和人们试图用无效的电子邮件地址欺骗系统。

我想要捕捉的事情的例子:

  • blah@blah.com
  • blah@blah.org
  • blah@blah.weirdtld
  • blat [AT] blah.com
  • 嗒嗒[在] blah.com
  • blah @ blah [DOT] com
  • blah @ blah [dot] .com

我确信那里的某个人已经发布了一个经过验证的所有已知排列的表达方式,但是如果有的话,我找不到它,并且很乐意看到它。

我不在乎它是否意外地捕获域名,因为它们无论如何都被剥夺了。

这可以用于什么的真实例子是eBay。卖家希望将他们的描述“以更便宜的价格联系我:bob@example.com”,因为他们不需要支付上市费用。我想抓住那个地址,无论它是怎么写的。

我很欣赏不可能检查所有内容,这不是人工干预的替代品(这也是验证过程的一部分,我只是想让他们的生活更轻松。)

我已经搜索过StackOverflow和Google,但不幸的是,这是难以搜索的问题之一。如果有人有解决方案的链接,我将非常感激。

编辑:只是为了澄清更多。 NOT 用于检查电子邮件地址是否有效。这将用于阻止人们输入有效的电子邮件地址和具有常见替换的电子邮件地址到textarea([at]为@,[dot]为。,(d0t)for。等等等等。)

2 个答案:

答案 0 :(得分:0)

我想即使是沉重的垃圾邮件发送者也没有找到解决这个问题的简单方法,你也不会有太多运气。

为什么考虑算法是一个自杀的任务有几个原因,但主要的一个是人类的创造力与机器的愚蠢。

  1. 伪装电子邮件地址的方式确实无穷无尽,例如test @ domain.com (remove spaces)test[d0t]again atsign domain[.com](我花了2秒时间考虑它们,你肯定可以解决它们而没有任何问题。

  2. 即使您可以列出所有可能的替代方案(无论如何都是非人的任务),其他人会设计一个不同的方案来隐藏他们的电子邮件联系人(例如:将电子邮件地址放在内联图像中)

  3. 相比之下,here是最好的正则表达式,可以简单地检测覆盖每个RFC822案例的有效电子邮件地址。

答案 1 :(得分:0)

请参阅:How to Find or Validate an Email Address

<强>摘录:

  

...通常需要在确切的和什么之间进行权衡   实用。

     

我上面的正则表达式的优点是它匹配99%的   今天使用的电子邮件地址。它匹配的所有电子邮件地址都可以   由99%的电子邮件软件处理。如果你正在寻找   要快速解决问题,您只需阅读下一段。如果你   我想知道所有的权衡并获得大量的替代方案   选择,继续阅读。

要捕获可能是电子邮件地址别名的表达式,只需对[AT][ at ][DOT]等进行第二次测试。例如,这是一个RegEx,就是这样(i限定符告诉 Perl 忽略大小写):

/\[\s*(AT|DOT)\s*\]/i