改进概念
首先,让我们明确一点,\S+
它将匹配任何不是空白的东西一次或多次。
^\S+([\_\-\.]*\S+[\_\-]?)*@\S+([\_\-]?\S+)*\.+([\-\_]?\S)+(\.?\S+)*$
^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^ ^^ ^^^^^^^^^^^^^^^^^^^^
This all get's matched Same here wut? Same here, just
with \S+, so we can repeat use \S+
drop it dots?
所以我们可以通过使用来简化它\S+@\S+\.\S+
,但是等等?如果是这样,我们可以只使用\S+
它是无意义的。让我们使用^[^\s@]+@[^\s@]+$
.
^
: 行首
[^\s@]+
: 匹配除空格和@
@
: 匹配@
[^\s@]+
: 匹配除空格和@
$
: 行结束
修复你的正则表达式
让我们修复您的正则表达式。请注意,在字符类中,您不需要转义点、下划线等...将连字符放在开头,您也不需要转义它。在此之后,让我们删除那个丑陋的量词\.+
,结果应该是这样的:
^\S+([-_.]*\S+[-_]?)*@\S+([-_]?\S+)*\.([-_]?\S)+(\.?\S+)*$/
现在通过消除正则表达式的某些部分,我找到了罪魁祸首。这是\S+
:
^\S+([-_.]*\S+[-_]?)*@\S+([-_]?\S+)*\.([-_]?\S)+(\.?\S+)*$
here --^
所以你的最终正则表达式应该是^\S+[-_.]*@\S+([-_]?\S+)*\.([-_]?\S)+(\.?\S+)*$
.
看到它工作!
现在如果你问我为什么?老实说,我不知道,但我一如既往地建议阅读以下文章:停止使用复杂的正则表达式验证电子邮件地址。