2010-01-14 149 views
2

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

"^[-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})$" 

不幸的是,这不允许与 连字符 下划线的电子邮件地址。例:

[email protected]

我怎么能修改此允许 连字符 下划线?

+1

你的意思是下划线如:_?连字符是 - ,技术上我的作家老婆告诉我,短划线和连字符之间有区别 - 但是如果我知道它是什么,我会被诅咒的。 – Meep3D 2010-01-14 16:06:02

+0

是的,我的意思是下划线。现在对我来说,使用正则表达式还为时过早。 :)谢谢你抓住我的错误! – Sesame 2010-01-14 16:07:57

+0

连字符,破折号,负数等pp之间的区别足以让他们形成自己的unicode字符类:“标点符号破折号” – 2010-01-14 17:21:07

回答

3

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

如果它是好的,用下划线开头的电子邮件地址,添加_既出现之前@

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

如果电子邮件ID不能与_开始,添加字符类的它仅在第二字符类:

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

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

  1. 它接受以连字符开头的电子邮件地址;这是打算吗?如果没有,删除-从第一个字符类,使其[a-zA-Z0-9]
  2. 它接受连续周期的第一个字符后,从而[email protected]有效身份证 - 这是状态,通过设计

电子邮件地址的RFC规范相当复杂。有关更多信息,请参阅thesethreads。另外不要忘记检查唯一perfect and the official regex用于验证电子邮件地址(被警告,你可能会发现它有点什么理智建议更长)

+0

没有完美的正则表达式,因为电子邮件无法用正则语法描述 - 他们需要上下文敏感的语法。 – Lothar 2010-01-14 16:23:30

+0

您也可以尝试使用http://code.iamcal.com/php/rfc822/full_regexp.txt来验证电子邮件地址。 – FrustratedWithFormsDesigner 2010-01-14 16:29:40

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})$" 

可能吗?

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})$ 

我在两个字符类中加了“_”。

1

Regular-expressions.info有一个很好的讨论e-mail address validation by regex,包括他对“今天使用的所有电子邮件地址的99%”的首选正则表达式,以及另一个与RFC-2822定义的电子邮件地址相匹配的正则表达式。

我不会通过在这里复制他的作品来破坏作者。但我认为它值得一读,因为它与你的问题直接相关。

1

拉里奥斯特曼的网站上还有一个有趣的博客post about email validation

这是他原始帖子的后续文章,他试图生成一个正则表达式来验证电子邮件地址。他的正则表达式是:

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完全合法,这是不允许的。

和...

阿迪奥尔泰安指出,.NET Framework的V2包含其中包含一个内置的验证器的System.Net.MailAddress类。

它看起来像System.Net.Mail.MailAddress构造函数验证电子邮件地址,你可以捕获一个FormatException以确保电子邮件是有效的。

相关问题