我使用以下正则表达式验证电子邮件地址:
"^[-a-zA-Z0-9][-.a-zA-Z0-9]*@[-.a-zA-Z0-9]+(\.[-.a-zA-Z0-9]+)*\.(com|edu|info|gov|int|mil|net|org|biz|name|museum|coop|aero|pro|[a-zA-Z]{2})$"
不幸的是,这不允许带有连字符下划线的电子邮件地址。例如:
first_last@abc.com
如何修改此选项以允许连字符下划线?
答案 0 :(得分:3)
_
不是连字符,而是下划线。连字符是-
如果可以使用下划线启动电子邮件地址,请将_
添加到@
之前出现的两个字符类
^[-a-zA-Z0-9_][-.a-zA-Z0-9_]*@...
如果电子邮件ID无法以_
开头,请仅将其添加到第二个字符类:
^[-a-zA-Z0-9][-.a-zA-Z0-9_]*@...
那就是说,你的正则表达式有几个问题:
-
,使其成为[a-zA-Z0-9]
3...@example.com
成为有效的ID - 这是按设计状态吗?电子邮件地址的RFC规范非常复杂。有关详细信息,请参阅these threads。另外,请不要忘记检查唯一的perfect and the official regex以验证电子邮件地址(请注意,您可能会发现小比理智建议的时间更长)
答案 1 :(得分:1)
"^[-_a-zA-Z0-9][-_.a-zA-Z0-9]*@[-_.a-zA-Z0-9]+(\.[_-.a-zA-Z0-9]+)*\.(com|edu|info|gov|int|mil|net|org|biz|name|museum|coop|aero|pro|[a-zA-Z]{2})$"
可能?
答案 2 :(得分:1)
^[-a-zA-Z0-9_][-.a-zA-Z0-9_]*@[-.a-zA-Z0-9]+(\.[-.a-zA-Z0-9]+)*\.(com|edu|info|gov|int|mil|net|org|biz|name|museum|coop|aero|pro|[a-zA-Z]{2})$
我在你的两个角色类中添加了“_”。
答案 3 :(得分:1)
Regular-expressions.info对e-mail address validation by regex进行了非常好的讨论,包括他对“今天使用的所有电子邮件地址的99%”的首选正则表达式,以及另一个匹配的电子邮件地址。 RFC-2822。
我不会通过在这里复制他的作品来使作者受到伤害。但我认为它值得一读,因为它与你的问题直接相关。
答案 4 :(得分:1)
Larry Osterman的网站上还有一篇有趣的博客post about email validation。
这是原帖的后续帖子,他试图生成正则表达式来验证电子邮件地址。他的RegExp是:
string strRegex = @"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
@"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" +
@".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";
他的笔记:
在这个语法中要注意的关键是本地部分在本地部分几乎是自由形式。并且在本地部分允许使用的字符,如!,*,$等,根据RFC2822是完全合法的,不允许使用。
和......
Adi Oltean指出.Net框架的V2包含System.Net.MailAddress类,其中包含一个内置验证器。
看起来System.Net.Mail.MailAddress构造函数验证电子邮件地址,您可以捕获FormatException以确保电子邮件有效。