电子邮件条目正则表达式验证

时间:2010-01-14 16:01:34

标签: c# regex validation email

我使用以下正则表达式验证电子邮件地址:

"^[-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

如何修改此选项以允许连字符下划线?

5 个答案:

答案 0 :(得分:3)

_不是连字符,而是下划线。连字符是-

如果可以使用下划线启动电子邮件地址,请将_添加到@之前出现的两个字符类

^[-a-zA-Z0-9_][-.a-zA-Z0-9_]*@...

如果电子邮件ID无法以_开头,请仅将其添加到第二个字符类:

^[-a-zA-Z0-9][-.a-zA-Z0-9_]*@...

那就是说,你的正则表达式有几个问题:

  1. 它接受以连字符开头的电子邮件地址;是这个意图吗?如果没有,请从第一个字符类中删除-,使其成为[a-zA-Z0-9]
  2. 它接受第一个字符后的连续句点,从而使3...@example.com成为有效的ID - 这是按设计状态吗?
  3. 电子邮件地址的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以确保电子邮件有效。