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

Set*_*can 3 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])?/;
Run Code Online (Sandbox Code Playgroud)

它适用于我的电子邮件验证的大多数情况,但它允许这一个通过:

test..testing @ gmail.com

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

谢谢.

Mar*_*ers 10

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

/^(?!.*\.{2})[a-z0-9etc...
 ------------
Run Code Online (Sandbox Code Playgroud)

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

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

  • 但是它仍然会在@之前直接允许点(当然你也可以修复它,但最终会在哪里?) (2认同)

Lig*_*ica 5

别.该电子邮件地址在实践中起作用(尽管根据相关RFC 技术上无效).

热门提示:不要使用正则表达式"验证"电子邮件地址,否则会出错.

  • 不,它不是,你不能有连续的点.并且不允许地址以点开头,或以点结尾. (2认同)