regex 修复电子邮件的正则表达式,使其不允许连续的句号

qv7cva1a  于 2023-10-22  发布在  其他
关注(0)|答案(4)|浏览(101)

我的正则表达式很糟糕,所以我想在这方面寻求一些帮助。
我有一个正则表达式:

/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/;

它适用于我的电子邮件验证的大多数情况下,但它允许这一个通过:
email protected(https://stackoverflow.com/cdn-cgi/l/email-protection)
我如何改变上面的正则表达式,使其在整个字符串中不允许出现连续的句点?
谢谢.

okxuctiv

okxuctiv1#

为了避免匹配两个连续的点,你可以在正则表达式的开头添加一个负的lookahead:

/^(?!.*\.{2})[a-z0-9etc...
 ------------

如果字符串中有两个连续的句点,并且不需要对原始正则表达式进行任何其他修改,则它将无法匹配。
然而,这似乎是一个坏主意,因为你的正则表达式首先是不正确的。如果您坚持使用正则表达式来验证电子邮件地址,请尝试以下操作:

5tmbdcev

5tmbdcev2#

不要。该电子邮件地址是functional in practice(尽管根据相关RFC技术上无效)。
小贴士:不要用正则表达式“验证”电子邮件地址,因为你会出错。

fykwrbwg

fykwrbwg3#

不要试图发明轮子;)
例如,请看这里:
http://www.regular-expressions.info/email.html

nnvyjq4y

nnvyjq4y4#

// Valid - email Regex
^[A-Za-z0-9_%+-]+(?:\.[A-Za-z0-9_%+-]+)*@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$
使用这个,这将不允许任何电子邮件开始和结束的时期,以及没有连续的时期和特殊符号

相关问题