电子邮件进入正则表达式验证
我使用正则表达式如下验证电子邮件地址:电子邮件进入正则表达式验证
"^[-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})$"
不幸的是,这不允许与
连字符
下划线的电子邮件地址。例:
我怎么能修改此允许
连字符
下划线?
_
不是连字符,它是下划线。连字符-
如果它是好的,用下划线开头的电子邮件地址,添加_
既出现之前@
^[-a-zA-Z0-9_][-.a-zA-Z0-9_]*@...
如果电子邮件ID不能与_
开始,添加字符类的它仅在第二字符类:
^[-a-zA-Z0-9][-.a-zA-Z0-9_]*@...
这就是说,你的正则表达式有几个问题:
- 它接受以连字符开头的电子邮件地址;这是打算吗?如果没有,删除
-
从第一个字符类,使其[a-zA-Z0-9]
- 它接受连续周期的第一个字符后,从而
[email protected]
有效身份证 - 这是状态,通过设计?
电子邮件地址的RFC规范相当复杂。有关更多信息,请参阅thesethreads。另外不要忘记检查唯一perfect and the official regex用于验证电子邮件地址(被警告,你可能会发现它有点比什么理智建议更长)
没有完美的正则表达式,因为电子邮件无法用正则语法描述 - 他们需要上下文敏感的语法。 – Lothar 2010-01-14 16:23:30
您也可以尝试使用http://code.iamcal.com/php/rfc822/full_regexp.txt来验证电子邮件地址。 – FrustratedWithFormsDesigner 2010-01-14 16:29:40
"^[-_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})$"
可能吗?
^[-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})$
我在两个字符类中加了“_”。
Regular-expressions.info有一个很好的讨论e-mail address validation by regex,包括他对“今天使用的所有电子邮件地址的99%”的首选正则表达式,以及另一个与RFC-2822定义的电子邮件地址相匹配的正则表达式。
我不会通过在这里复制他的作品来破坏作者。但我认为它值得一读,因为它与你的问题直接相关。
拉里奥斯特曼的网站上还有一个有趣的博客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以确保电子邮件是有效的。
你的意思是下划线如:_?连字符是 - ,技术上我的作家老婆告诉我,短划线和连字符之间有区别 - 但是如果我知道它是什么,我会被诅咒的。 – Meep3D 2010-01-14 16:06:02
是的,我的意思是下划线。现在对我来说,使用正则表达式还为时过早。 :)谢谢你抓住我的错误! – Sesame 2010-01-14 16:07:57
连字符,破折号,负数等pp之间的区别足以让他们形成自己的unicode字符类:“标点符号破折号” – 2010-01-14 17:21:07