2009-01-16 127 views
2

重复Using a regular expression to validate an email address电子邮件地址的正确表达式是什么?


似乎有一个可怕的很多不同的变种,在这个网络上,并想知道是否有一个明确的答案?

最好使用正则表达式的.net(正则表达式)方言。

+0

请参阅一个[问题](http://stackoverflow.com/questions/201323/what-是最最好的正则表达式,用于验证的-电子邮件地址)。 – Keltia 2009-01-16 15:21:03

回答

1

regular-expressions说,这一个匹配约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])? 
+0

我讨厌这个链接页面,以及作者关于什么是可以接受的权衡的想法。这是他列出的正则表达式的更好的版本之一。 – SpoonMeiser 2009-01-16 15:26:18

0

我前一段时间有同样的问题。 RFC 2822定义它,并根据this page这一个是有用的,是我挑选的人:“[a-z0-9!#$%&'+/=?^ _ {|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_ {|}〜 - ] +) @ ?:a-z0-9?)+(?:[AZ] {2} | com | org | net | gov | mil | biz | info | mobi | name | aero | jobs | museum)\ b“

+0

为什么这需要tld在里面呢?那么.ca和.uk如何呢? – jdkoftinoff 2009-01-16 15:24:01

+0

另外,.asia。试图确保域在正则表达式内是有效的,这是一种徒劳的行为,而不是正则表达式的意义。正则表达式只应确保它是有效的格式。 – SpoonMeiser 2009-01-16 15:29:08

+0

这些仅适用于匹配*美国*地址。当你处于这个状态时,你应该只对域名进行ping操作并检查它是否有效。那么你不必制作一个包含每个可以想象的后缀的正则表达式。 – 2009-01-16 15:32:07

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])? 

可能要在所有小写版本旁添加AZ以允许使用大写字母。

1

The 权威答案?或者正常的答案?

我问,因为正式电子邮件地址规范允许各种奇怪的事情(括号,引用的短语等),大多数人不打算考虑。

两个全面正常 regex'es的列表,请参阅this page

1

我不认为有一个银色的子弹用于电子邮件正则表达式验证。

人们通常所做的只是验证错误,比如缺少@和一个点。然后发送电子邮件验证到该地址。只有这样才能确保他们的电子邮件实际上是有效的。

0

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

^[\w-\.][email protected]([\w-]+\.)+[\w-]{2,4}$
相关问题