用于测试电子邮件地址中受限字词的正则表达式无法正常工作
Regex to test for restricted word in email address not working correctly
我有一个正则表达式给我带来了一些麻烦。我想限制其中包含特定单词的域,例如 'foobar'。我有一个正则表达式来测试某个域,例如 foobar.com,但我也想涵盖:
- 内部。foobar.com
- foobarcorp.com
- randomdomainwithfoobarinit.co.uk
- foobar.net
- 等等
到目前为止,我的正则表达式几乎正确地涵盖了所有内容,除非 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)
但这显然是您可以根据您希望提供的安全性做出的决定。
你可以试试这个:
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'));
我有一个正则表达式给我带来了一些麻烦。我想限制其中包含特定单词的域,例如 'foobar'。我有一个正则表达式来测试某个域,例如 foobar.com,但我也想涵盖:
- 内部。foobar.com
- foobarcorp.com
- randomdomainwithfoobarinit.co.uk
- foobar.net
- 等等
到目前为止,我的正则表达式几乎正确地涵盖了所有内容,除非 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)
但这显然是您可以根据您希望提供的安全性做出的决定。
你可以试试这个:
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'));