正则表达式不允许电子邮件中的点位于错误的位置

时间:2017-06-20 16:47:39

标签: javascript regex validation email

我必须验证公司的电子邮件。正则表达式应验证它是否来自公司,可能来自John。

我的正则表达式现在看起来像这样:

/[a-z0-9.]*(john)[a-z0-9.]*@mycompany\.com/

唯一的问题是,它允许点在错误的位置。 我看到这封电子邮件有效:

john@mycompany.com smith.john@mycompany.com john.smith@mycompany.com

但我不应该看到有效的这些:

john.@mycompany.com .john@mycompany.com

4 个答案:

答案 0 :(得分:1)

/^([a-z0-9][a-z0-9.]*)?(john)([a-z0-9.]*[a-z0-9])?@mycompany\.com$/

这应确保(john)之前/之后的字符分别以.开头/结尾。

答案 1 :(得分:1)

替代解决方案

^(?!\.)[a-z0-9.]*(john)(?:[a-z0-9]|\.(?!@))*@mycompany\.com$

答案 2 :(得分:0)

请尝试

\w+(john)?\.?\w+?@mycompany\.com

匹配

john@mycompany.com
smith.john@mycompany.com
john.smith@mycompany.com

但不是

john.@mycompany.com
.john@mycompany.com

在最后一种情况下,它实际上只抓取了点

之后的部分
john@mycompany.com

答案 3 :(得分:0)

当我写完答案时,你已经得到了很多答案。 :-)好的,这是你可以测试的其他内容。

^([[:alnum:]]+\.)?john(\.[[:alnum:]]+)?@mycompany\.com

我在regex101.com

上测试过

如果我在 john 之前和之后理解得很好,那么应该用点.

分隔一些单词