我想知道是否有人有一个好的正则表达式来匹配电子邮件地址,加上常见的混淆方法,例如“joe [at] foo [dot] com”。我并不是在寻找一个完全符合RFC的超级正则表达式。例如,以下内容基本足够好:
^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$
我只需要调整它的最常见的方式来混淆电子邮件地址。是的,我知道有些人会智胜它,并找到一种方法来混淆他们的电子邮件地址的方式,正则表达式不会匹配,但我不担心这些情况。
编辑:请阅读整个问题。我不是在问验证电子邮件地址的问题。我知道网上有成千上万的帖子。我专门研究如何检测混淆的电子邮件地址。
4条答案
按热度按时间50few1ms1#
不如这样做吧:
下面是它在工作中的一个例子:http://regexr.com?2uh92
简而言之,它基本上使用方括号在
@
和.
分隔符处生成选项组。您可以很容易地插入(\[|\()
而不是括号,使它们可以选择使用括号,这将匹配类似hi_there (at) gmail (dot) com
的内容。rmbxnbpk2#
我从@Nightfirecat那里拿来了原始脚本,并对其进行了一些改进,因为它无法与ie匹配。这些电子邮件:
domain.com
联系{@} guardian [dot] co [dot] uk
hello [@] jazzit(dot)hr
下面是正则表达式的改进版本:
Demo(或here-非闪存)
2nbm6dog3#
这是基于Nightfirecat的回答。以下正则表达式将匹配电子邮件地址和文本中的常见模糊处理***:
当以下任何一项在文本字符串中时,这将查找匹配项:
如果你不需要或不想匹配文本中的混淆电子邮件地址***,只需替换开头的“^”和结尾的“$”(或在Rails中使用\A和\z)。
我用这个来确保用户不把电子邮件地址放在不属于它的文本中(或者在他们这样做时警告他们)。他们被提示在其他地方输入。
nwo49xxi4#
正如这个答案所解释的,按照RFC 5322规范检测有效邮件地址的正确模式是:
粘糊糊的小东西
请注意,
(?&comment)
产生是完全递归的,这是RFC 5322规范。如果你使用的是一个玩具正则表达式引擎,它不能处理模式中的递归,那么你将无法编写一个正则表达式,它将不能正确地匹配RFC 5322中的邮件地址。