2011-06-20 60 views
3

我试图让这个正则表达式语句工作正则表达式逗号分隔的电子邮件

^([_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})+(\s?[,]\s?|$))+$

为逗号的字符串使用jQuery('#textbox').val();其传递值到正则表达式语句来找出错误的分离在textbox电子邮件一个字符串,如:

"[email protected], [email protected],[email protected]"

但由于某些原因,它返回一个错误。我试图通过http://regexpal.com/运行它,但我不确定?

注:这仅仅是一个基本的客户端测试。我使用.NET4.0在服务器端通过MailClass验证电子邮件 - 所以不要再跳下我的喉咙。这里的目的是消除简单的错误。

转义版本:

^([_a-z0-9-]+(\\.[_a-z0-9-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-z]{2,3})+(\\s?[,]\\s?|$))+$

+6

为什么不用split(',')'分割字符串,然后通过更简单的正则表达式运行每封电子邮件? –

+0

@Pablo - 感谢您的回复。只有'+(\ s?[,] \ s?| $)'与逗号分隔值有关 - 其​​余部分是电子邮件验证。即使我拆分电子邮件 - 我仍然会通过这个运行吗? –

+0

你看到什么错误? –

回答

2

可以大大第一剖开的逗号简化的东西,如巴勃罗说,然后重复应用正则表达式来验证每一个人电子邮件。你也可以指出那个不好的 - 但有一个很大的警告。

看看文章Comparing E-mail Address Validating Regular Expressions的正则表达式。还有另一个更好的正则表达式,我现在找不到,但重点是检查电子邮件的正确的正则表达式非常复杂,因为RFC中指定的有效电子邮件地址的规则非常复杂。

在你的,这部分(\.[a-z]{2,3})+我跳了出来;二或三 - 字母组{2,3}我经常看到作为一种尝试验证顶级域名,但(1)您正则表达式允许这些群体之一以上和(2)你会排除有效的电子邮件地址域,如.info.museum(很多网站拒绝我.us地址,因为他们以为只有3个字母的域名是合法的。)

我的建议,拒绝认真无效地址,同时使最终验证服务器,是为了让基本上(任何东西)@(任何东西)(任何东西) - 只检查“at”和“dot”,当然允许多个点。

编辑:示例 “简单” 的正则表达式

[^@][email protected][^.]+(\.[^.]+)+

这个匹配

而且不匹配[email protected]

注:即使这会拒绝一些有效的电子邮件地址,因为什么被允许在@的左 - 甚至是另一个@ - 如果这一切都正确转义。但在真实生活中使用电子邮件25年以来,我从未见过这种情况。

+0

非常简单:)所以我用了splitter,用这个简单的版本进行验证,并且在服务器端用ASP.NET进行验证:)开心的日子! –

相关问题