正则表达式逗号分隔的电子邮件
Posted
技术标签:
【中文标题】正则表达式逗号分隔的电子邮件【英文标题】:Regex Comma Separated Emails 【发布时间】:2011-06-20 15:13:47 【问题描述】:我正在尝试让这个 Regex 语句起作用
^([_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]2,3)+(\s?[,]\s?|$))+$
对于textbox
中的一串逗号分隔的电子邮件,使用jQuery('#textbox').val();
将值传递到正则表达式语句以查找以下字符串的错误:
"test@test.com, test1@test.com,test2@test.com"
但由于某种原因,它返回了一个错误。我尝试通过http://regexpal.com/ 运行它,但我不确定?
注意:这只是一个基本的客户端测试。我使用 .NET4.0 在服务器端通过 MailClass
验证电子邮件 - 所以不要重蹈覆辙。这里的目的是消除简单的错误。
转义版本:
^([_a-z0-9-]+(\\.[_a-z0-9-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-z]2,3)+(\\s?[,]\\s?|$))+$
【问题讨论】:
为什么不用split(',')
分割字符串,然后通过更简单的正则表达式运行每封电子邮件?
@Pablo - 感谢您的回复。只有+(\s?[,]\s?|$)
与逗号分隔值相关 - 其余的是电子邮件验证。意思是即使我拆分电子邮件 - 无论如何我仍然会通过它运行它?
可以添加使用正则表达式的代码吗?您的表达式在 .net 中有效,只要正确使用和转义,我看不到任何对 javascript 无效的内容。
@agent-j - 我没有看到错误 - 问题是正则表达式不断返回上述字符串的 errorMessage 并且没有意义?即希望有人确认它不正确?
@agent-j - 还添加了转义版本?
【参考方案1】:
正如 Pablo 所说,您可以先用逗号分隔,然后重复应用正则表达式来验证每封电子邮件,从而大大简化事情。然后你也可以指出不好的地方——但有一个很大的警告。
查看文章Comparing E-mail Address Validating Regular Expressions 中的正则表达式。还有一个更好的正则表达式,我刚才找不到,但关键是检查电子邮件的正确正则表达式非常复杂,因为 RFC 中指定的有效电子邮件地址的规则非常复杂。
在你的,这部分(\.[a-z]2,3)+
跳到我身上;两个或三个字母的组2,3
我经常将其视为验证***域的尝试,但是(1)您的正则表达式允许这些组中的一个或多个,并且(2)您将从 .info
或 .museum
等域中排除有效的电子邮件地址(许多网站拒绝我的 .us
地址,因为他们认为只有 3 个字母的域是合法的。)
我的建议是拒绝严重无效的地址,同时将最终验证留给服务器,基本上允许 (anything)@(anything).(anything) -- 只检查“at”和“dot”,当然允许多个点。
编辑:“简单”正则表达式的示例
[^@]+@[^.]+(\.[^.]+)+
这匹配
test@test.com test1@test.com test2@test.com foo@bar.baz.co.uk myname@modern.museum与foo@this....that
不匹配
注意:即使这样也会拒绝一些有效的电子邮件地址,因为在 @
的左侧允许 任何东西 - 甚至是另一个 @
- 如果它全部正确转义。但在现实生活中使用电子邮件的 25 年中,我从未见过这种情况。
【讨论】:
非常简单 :) 所以我改用了拆分器,使用这个更简单的版本进行了验证,并且仍然在服务器端使用 ASP.NET 进行验证 :) 快乐的日子!以上是关于正则表达式逗号分隔的电子邮件的主要内容,如果未能解决你的问题,请参考以下文章