我的正则表达式有问题。我之前没有测试过。我有以下正则表达式:
^(?:(?:[a-z])+(.|_)?(?!\.))*\w@(?:(?:[a-z])+(-|.)?(?!\.))*\w\.\w{2,}$
现在,我的电子邮件验证工作正常。以下是一些测试(根据regex101):
test -- invalid
test@ -- invalid
test@test -- invalid
test@test. -- invalid
test@test.de -- valid
test@test.de. -- invalid
test@test@test.com -- valid
test...test@test.com -- invalid
因此,可以使用多个@
,这对于电子邮件无效。
我有点看不出我做错了什么。
注:
我知道有一个stackoverflow问题有一个关于如何用正则表达式验证电子邮件的方法,但是:我想知道我做错了什么,所以我可以从中学习。
答案 0 :(得分:1)
我自己发现了这个问题。以下正则表达式确实有效:
^(?:(?:\w)+(\.|_)?(?!\.))*\w@(?:(?:[a-z])+(-|\.)?(?!\.))*[a-z]\.[a-z]{2,}$
我将(.|_)
更改为(\.|_)
并将(-|.)
更改为(-|\.)
以使用.
字面上作为句点而不是“所有字符”通配符“' 。我在\w\.\w{2,}
中更改了[a-z]\.[a-z]{2,}
以禁用最后一部分中的_
。