用于测试电子邮件地址中受限字词的正则表达式无法正常工作

Regex to test for restricted word in email address not working correctly

我有一个正则表达式给我带来了一些麻烦。我想限制其中包含特定单词的域,例如 'foobar'。我有一个正则表达式来测试某个域,例如 foobar.com,但我也想涵盖:

到目前为止,我的正则表达式几乎正确地涵盖了所有内容,除非 foobar 之前有字符,因此 myfoobar.com 不会被捕获,但 foobarcorp.com 会。我在 @ 符号后尝试了 w+. 以及 * 的组合,但没有找到正确的组合。有任何想法吗?我试图搜索堆栈溢出,但大多数类似的问题都涉及限制某个已知的域,而我试图覆盖我不一定提前知道的域。

代码:

var regex = /\w+@((?!foobar).)*\../i;
ngModel.$setValidity('restrict-email', regex.test(value)); 

可能是这样的:

/.*(foobar).*/i

我在 RegExr 上测试了它,它匹配你提到的所有情况。

\w+@?((?!foobar).)*\.

只是缺少一个 optional 参数 ?

更具体地说,您可以像这样自己列出域:

\w+@?((?!foobar).)*\.(com|net|co\.uk)

https://regexr.com/3h68s

但这显然是您可以根据您希望提供的安全性做出的决定。

你可以试试这个:

var regex = /\w+@(\w+\.?)?foobar(\w+)?(\.\w+)+/i;

console.log(regex.test('a@internal.foobar.com'));
console.log(regex.test('a@foobarcorp.com'));
console.log(regex.test('a@foobarcorp.com'));
console.log(regex.test('a@randomdomainwithfoobarinit.co.uk'));
console.log(regex.test('a@foobar.net'));