3

我正在尝试使此 Regex 语句起作用

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

对于使用逗号分隔的电子邮件字符串,textboxjQuery('#textbox').val();值传递到正则表达式语句以查找字符串的错误,例如:

"test@test.com, test1@test.com,test2@test.com"

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

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

转义版本:

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

4

1 回答 1

2

正如 Pablo 所说,您可以先用逗号分隔,然后重复应用正则表达式来验证每封电子邮件,从而大大简化事情。然后,您还可以指出不好的地方——但有一个很大的警告。

查看文章比较电子邮件地址验证正则表达式中的正则表达式。我刚才找不到另一个更好的正则表达式,但关键是检查电子邮件的正确正则表达式非常复杂,因为 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
  • 我的名字@modern.museum

而且不匹配foo@this....that

注意:即使这样也会拒绝一些有效的电子邮件地址,因为任何东西都可以在左边@- 甚至是另一个@- 如果它全部正确转义。但在现实生活中使用电子邮件的 25 年里,我从未见过这种情况。

于 2011-06-20T16:39:56.743 回答