正则表达式逗号分隔的电子邮件

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 进行验证 :) 快乐的日子!

以上是关于正则表达式逗号分隔的电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

优化逗号分隔值正则表达式

正则表达式逗号分隔分隔符

用于逗号分隔文本的 Mysql 正则表达式

C# 正则表达式在 外用逗号分隔

逗号分隔的列表正则表达式 [重复]

通过正则表达式获取逗号分隔的数字