匹配电子邮件地址的正则表达式

3

我正在尝试验证一个TextEdit,以确保其包含真实的电子邮件地址。我有一个正则表达式可以做到这一点,但它会验证多个地址,而我只想验证一个地址,不要更多。

这是我拥有的表达式:

/^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,3})$/

这个功能可以验证类似于这样的内容:

yulien.paz@cav.desoft.cu, wcampbell@cav.desoft.cu

我需要从TextEdit中提取第二个电子邮件地址。

那么,我该怎么做呢?

注意:我的英语不太好,请见谅。


1
它出问题了。例如,在.mobi、.info或.museum顶级域中,它不允许电子邮件地址。而且它也不允许包含加号或大写字母的电子邮件地址。把它扔掉吧。 - Quentin
1
@Campbell:在Stack Overflow上也有女孩 :) - Daniel Vassallo
1
如果您需要从TextEdit中取出第二个电子邮件地址,是否可以不使用split()函数,而是使用结果数组的第一个结果(从索引0开始)? - ccheneson
1
如果我知道的话,我会梳理头发的。 - Andy E
这可能是SO上最流行的正则表达式问题:https://dev59.com/3HVD5IYBdhLWcg3wOo9h - ic3b3rg
3个回答

2

3
没有任何一个长度如此短的正则表达式能够正确验证电子邮件地址。 - Andrew Barber

1
为了在段落中找到电子邮件地址,以上方法都不起作用。相反,您需要寻找单词边界,例如:
\b[_\S\d-]+@[_\S\d-]+\.[\S]{2,3}\b

然后如有需要使用 /g。

-3

试试这个

/^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/

该正则表达式不允许电子邮件地址包含加号。根据RFC 2822(http://tools.ietf.org/html/rfc2822),以下非字母数字字符在电子邮件地址中是有效的:!# $%&' * + - / =?^ _ - Joe Lencioni
嗯...好的,但它会比上面的更长。 - streetparade
1
哦,是的。非常长。http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html ...这就是为什么你不应该使用正则表达式来“验证”电子邮件地址。 - bobince

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