我的正则表达式很糟糕,所以我想在这方面寻求一些帮助。
我有一个正则表达式:
/[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)
我如何改变上面的正则表达式,使其在整个字符串中不允许出现连续的句点?
谢谢.
4条答案
按热度按时间okxuctiv1#
为了避免匹配两个连续的点,你可以在正则表达式的开头添加一个负的lookahead:
如果字符串中有两个连续的句点,并且不需要对原始正则表达式进行任何其他修改,则它将无法匹配。
然而,这似乎是一个坏主意,因为你的正则表达式首先是不正确的。如果您坚持使用正则表达式来验证电子邮件地址,请尝试以下操作:
5tmbdcev2#
不要。该电子邮件地址是functional in practice(尽管根据相关RFC技术上无效)。
小贴士:不要用正则表达式“验证”电子邮件地址,因为你会出错。
fykwrbwg3#
不要试图发明轮子;)
例如,请看这里:
http://www.regular-expressions.info/email.html
nnvyjq4y4#
// Valid - email Regex
^[A-Za-z0-9_%+-]+(?:\.[A-Za-z0-9_%+-]+)*@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$
使用这个,这将不允许任何电子邮件开始和结束的时期,以及没有连续的时期和特殊符号