修复电子邮件的正则表达式不允许连续的时间段

时间:2011-03-02 22:10:54

标签: javascript regex validation

我的常规表达非常糟糕,所以我想在这方面寻求帮助。

我有一个正则表达式:

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

它适用于我的电子邮件验证的大多数情况,但它允许通过以下方式:

test..testing @ gmail.com

如何将上述正则表达式更改为不允许整个字符串中的连续句点?

感谢。

3 个答案:

答案 0 :(得分:10)

为避免匹配两个连续的点,您可以在正则表达式的开头添加一个负向前瞻:

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

如果字符串中有两个连续的句点,并且不需要对原始正则表达式进行任何其他修改,则它将无法匹配。

然而,这似乎是一个坏主意,因为你的正则表达式首先是不正确的。如果您坚持使用正则表达式来验证电子邮件地址,请尝试以下操作:

答案 1 :(得分:5)

别。该电子邮件地址为functional in practice(尽管technically invalid根据相关RFC)。

热门提示:不要使用正则表达式“验证”电子邮件地址,因为您会弄错。

答案 2 :(得分:0)

不要试图发明轮子;)

例如,请看这里:

http://www.regular-expressions.info/email.html