什么是正确的电子邮件地址正则表达式?

4

请查看这个问题: 点击此处. - Keltia
7个回答


1

是“权威”的答案?还是“普通”的答案?

我问这个问题是因为正式的电子邮件地址规范允许各种奇怪的东西(括号、引用短语等),而大多数人都没有考虑到这些。

请参见this page,其中列出了全面和普通的正则表达式列表。


1

我认为在电子邮件正则表达式验证方面并没有万能的解决方法。

人们通常只验证错误,例如@和一个点的缺失。然后向该地址发送电子邮件验证。这是确保电子邮件实际有效的唯一方法。


1

正则表达式说这个匹配约99%

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?

我讨厌那个链接页面,以及作者对可接受的权衡的看法。不过,那是他列出的正则表达式中较好的一个版本。 - SpoonMeiser

0

我以前也遇到过同样的问题。RFC 2822对此进行了定义,根据这个页面,这个正则表达式很有用,我选择了它:"[a-z0-9!#$%&'+/=?^_{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_{|}~-]+)@(?:a-z0-9?.)+(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum)\b"


为什么需要在其中包含 TLD 呢?例如 .ca 和 .uk 呢? - jdkoftinoff
此外,.asia。试图确保域名在正则表达式内是有效的是徒劳无功的,这也不是正则表达式的目的。正则表达式只应确保其格式有效。 - SpoonMeiser
这些只适用于匹配美国地址。顺便一提,您应该ping一下该域名并检查其是否有效。这样,您就不必编写包含每个可能后缀的正则表达式了。 - lc.

0

我不确定这个问题是否有一个明确的答案,但是如果你忽略实际检查域名是否存在,电子邮件地址可以简化为<username>@<domain>,其中<domain>至少包含一个点和两到四个后缀字符。你可以做各种各样的事情来检查非法/特殊字符,但最简单的方法是:

^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$

Why [\w-\.]+? - Jimbali

0
[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?

可能需要在所有小写版本旁边添加 A-Z,以允许大写字母。


2
或使用不区分大小写模式 - dancavallaro

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