我在 js 中使用以下正则表达式
^[a-zA-Z0-9._+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$
这将验证子域中的电子邮件(例如: <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a2cfdbccc3cfc7e2c5cdcdc5cec78cc1cd8ccbcc" rel="noreferrer noopener nofollow">[email protected]</a>
)
不幸的是,双点也被验证为 true,例如
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a9c4d0c7c8c4cce98787c0c7" rel="noreferrer noopener nofollow">[email protected]</a>
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="15786c7b74787055717a78747c7b3b3b7c7b" rel="noreferrer noopener nofollow">[email protected]</a>
我理解了@[a-zA-Z0-9.-]
部分是要修改但有点震惊。最好的继续方式是什么。
TIA
最佳答案
尝试使用:
^([\w+-]+\.)*[\w+-]+@([\w+-]+\.)*[\w+-]+\.[a-zA-Z]{2,4}$
我已将 [a-zA-Z0-9_]
替换为字符组中完全相同的 \w
。
请注意,在正则表达式语言中,点 .
是一个特殊字符,可以匹配所有内容(除了换行符)。因此,要匹配文字点,您需要对其进行转义 \.
.
传说:
^
字符串开头([\w+-]+\.)*
零个或多个正则表达式单词(除了加号+
和减号-
)由 1 个或多个字符后跟一个文字点\.
组成
[\w+-]+
1 个或多个字符的正则表达式单词(加上[+-]
)@
文字字符([\w+-]+\.)*[\w+-]+
与上面的顺序相同\.[a-zA-Z]{2,4}
文字点,后跟长度在 2 到 4 个字符之间的小写或大写字符序列。$
字符串结尾
关于javascript - 如何防止正则表达式验证@字符后的双点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33994105/