1

我有这两个正则表达式,都用于验证电子邮件。第一个来自 ASP.NET 电子邮件正则表达式验证器,第二个来自我在 SO 上找到的。我的问题是它们之间有什么区别,哪个更好?

/^\w+([-+.\']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/

/^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/

两个正则表达式都允许ukkkk

<script type="text/javascript">

var regex = /^\w+([-+.\']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/;
var regex2 = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

alert(regex.test('nhassyk@yahoo.co.ukkkk'));
alert(regex2.test('nhassyk@yahoo.co.ukkkk'));

</script>
4

2 回答 2

1

“更好”是一个非常主观的术语——它取决于你到底在寻找什么。

第一个正则表达式允许在电子邮件地址的第一部分使用单引号字符并使用包含下划线的 \w+,因此如果您将其用作“更好”的标准之一,则它更具包容性。

第二个不会在第一个使用的任何地方都使用下划线,但这很简单,因为顶级域中没有下划线。它也更慢,因为{2,4}+$/它将地址的末尾分成 2、3 或 4 个组,直到它“正确”。它应该更改{2,})$为运行得更快。

最终,它将归结为您希望被视为有效的电子邮件地址。

于 2012-06-20T21:02:25.267 回答
1

其实,两者都不完美。

让我们让它们变得更好:因为[a-zA-Z0-9_]\w是相同的,我们使用第二个变体。
有第一级域如travel,所以我们会增加它的最大长度,但当然我们不会*在第一个正则表达式中使用 as 。
毕竟,第二个正则表达式有一个错误——不应该有最后一个加号。我们需要有一级域名,但只有一个。

这是一个结果:^([\w\.\-\+])+\@(([\w\-])+\.)+([a-zA-Z0-9]{2,6})$

无论如何,nhassyk@yahoo.co.ukkkk是有效的电子邮件,即使它不存在。

有人知道:有没有超过 6 个符号的一级域名?

更新是一篇关于根据 RFC 标准验证电子邮件的精彩文章。最终变体非常令人印象深刻。

于 2012-06-20T21:09:51.300 回答