Regex用于有效和无效的电子邮件地址


Regex for valid, and invalid email addresses

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

我想捕捉的事物示例:

  • blah@blah.com
  • blah@blah.org
  • blah@blah.weirdtld
  • blat.com
  • blah.com
  • blah@blah[DOT]com
  • blah@blah[dot].com
  • 等等

我相信有人已经发表了一篇关于所有已知排列的久经考验的表达,但如果他们发表了,我就找不到了,我很想看看

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

eBay就是一个真实的例子。卖方希望在其描述中加入"联系我:bob@example.com以更便宜的价格",因为他们不必支付登录费。我想找到那个地址,不管它是怎么写的。

我很感激不可能检查所有东西,这并不能取代人工干预(这也是验证过程的一部分,我只是想让他们的生活更轻松)。

我已经搜索了StackOverflow和谷歌,但不幸的是,这是一个很难搜索的问题。如果有人有解决方案的链接,我将不胜感激。

编辑:只是为了澄清更多。这是NOT,用于检查电子邮件地址是否有效。这用于阻止人们在文本区域([at]表示@,[dot]表示.,(d0t)表示。,等等)。

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

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

  1. 实际上有无数种方法可以伪装电子邮件地址,例如test @ domain.com (remove spaces)test[d0t]again atsign domain[.com](我花了2秒钟的时间思考它们,你肯定可以毫无问题地解码它们

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

相比之下,这里有一个最好的正则表达式,可以简单地检测覆盖所有RFC822情况的有效电子邮件地址。

请参阅:如何查找或验证电子邮件地址。

摘录:

在什么是准确的和什么是实际的

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

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

/'['s*(AT|DOT)'s*']/i
相关文章: