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

Javascript 正则表达式到don';不允许电子邮件中的点位于错误的位置,javascript,regex,validation,email,Javascript,Regex,Validation,Email,我必须确认一家公司的电子邮件。正则表达式应该验证它是否来自公司,是否可能来自John 我的正则表达式现在看起来像这样: /[a-z0-9.]*(约翰)[a-z0-9.]*@mycompany\.com/ 唯一的问题是,它允许点在错误的地方。 我看到有效的电子邮件: john@mycompany.com 史密斯。john@mycompany.com 厕所。smith@mycompany.com 但我不应该看到这些: john.@mycompany.com .john@mycompany.com/^

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

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

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

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

john@mycompany.com
史密斯。john@mycompany.com
厕所。smith@mycompany.com

但我不应该看到这些:

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

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

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

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

请尝试

\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
请试一试

\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
替代解决方案

^(?!\)[a-z0-9.]*(john)(?:[a-z0-9]\.(?!@))*@mycompany\.com$
替代解决方案


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

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

^([[:alnum:]]+\.)?john(\.[[:alnum:]]+)?@mycompany\.com
我试过了


如果我能很好地理解john前后的意思,那么当我写我的答案时,john应该是一个由点分隔的单词。

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

^([[:alnum:]]+\.)?john(\.[[:alnum:]]+)?@mycompany\.com
我试过了


如果我能很好地理解john前后的内容,那么john应该是由点分隔的单词,所以不要让第一组有点。关于验证电子邮件有很多问题。也许去看看其中的一些。你是把它们作为单独的字符串来测试的吗?试试看。约翰在这家公司有多少个电子邮件地址,你为什么不对照这个列表进行验证呢?事实上,这里有一个最常见的名字,一个约翰可以有多个别名电子邮件,所以不容易制作和维护一个完整的列表,所以不允许第一组有点。关于验证电子邮件有很多问题。也许去看看其中的一些。你是把它们作为单独的字符串来测试的吗?试试看。约翰在这家公司有多少个电子邮件地址,你为什么不对照这个列表进行验证呢?事实上,这里有一个最常见的名字,一个约翰可以有多个别名电子邮件,所以制作和维护一个完整的列表并不容易。实际上,这只是做了一半,
John。@mycompany.com
是无效的,但是
。john@mycompany.com
仍然有效。但还是要感谢你的帮助:)@aboutus不客气。我的错!在左侧添加
^
,在右侧添加
$
。它定义字符串的开始/结束。如果您一次只检查一个地址,这应该可以工作。我在回答中使用了结果表达式。是-是,一次只打开。谢谢你,在你的帮助下,我现在对正则表达式有了更好的理解:)@aboutus噢顺便说一句:你不需要
john
周围才能使用表达式。这是一个可以用于各种事情(反向引用、备选方案、匹配组)的组定义,但您似乎不使用其中任何一种。我只是把那些括号放在那里,就像你在表达式中用的那样,我不知道你对约翰的计划是什么;实际上这是做了一半,
john@mycompany.com
是无效的,但是
。john@mycompany.com
仍然有效。但还是要感谢你的帮助:)@aboutus不客气。我的错!在左侧添加
^
,在右侧添加
$
。它定义字符串的开始/结束。如果您一次只检查一个地址,这应该可以工作。我在回答中使用了结果表达式。是-是,一次只打开。谢谢你,在你的帮助下,我现在对正则表达式有了更好的理解:)@aboutus噢顺便说一句:你不需要
john
周围才能使用表达式。这是一个可以用于各种事情(反向引用、备选方案、匹配组)的组定义,但您似乎不使用其中任何一种。我只是把那些括号放在那里,就像你在表达式中用的那样,我不知道你对约翰的计划是什么;P