我需要一个与电子邮件地址中特定域名列表匹配的正则表达式。 我知道这可能不是一个受欢迎的问题,但它是供内部使用的,以及有限的电子邮件地址列表。我喜欢10-12个域名,我需要能够匹配。
域名不包含子域或点,后缀始终相同,如:
*@onedomain.com
*@anotherdomain.com
*@thirddomain.com
我试过这个:
/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@(?i)(onedomain|anotherdomain|thirddomain|domain4)\.com$/
但我收到此错误:语法无效。 请问有人帮忙吗? 感谢。
答案 0 :(得分:2)
您似乎无法将(?i)
与javascript正则表达式一起使用。
您必须使用/i
修饰符。
pattern = new RegExp('^[\w-]+(\.[\w-]+)*@(onedomain|anotherdomain|thirddomain|domain4)\.com$','i')
答案 1 :(得分:1)
我知道您要求使用正则表达式解决方案,但如果域名列表很长,您可能会考虑不在纯正的正则表达式中执行此操作。 10-12个域名可能会造成一个长期讨厌的表达。
相反,您可以使用正则表达式匹配基本电子邮件格式,然后保留一组允许列入白名单的域。这样您就不需要将所有域都放入表达式本身。
function isValidEmail(address) {
var domains = ["onedomain","anotherdomain","thirddomain","domain4"];
// Basic .com email matching
var regex = /^[\w-]+(?:\.[\w-]+)*@(.*)\.com$/i;
var matches = regex.exec(email);
// Assert that address is an .com email address
if (matches === null)
return false;
// return true if domain is in whitelist, false otherwise
return (domains.indexOf(matches[1]) != -1);
}
将@(.*)\.com
更改为@(.*\..{2,})
,您可以将完整的域放在白名单数组中,如果您需要匹配.com
以外的其他域,那么您必须放置domain4.com
而不是在数组中等。
答案 2 :(得分:0)
如果问题与正则表达式有关,可以试试这个:
/^[\w-\.]+@domain(1|2|3|4)\.com$/
关于你的正则表达式:我认为语法错误在(?i)
部分。我真的不知道这个组是什么,它是无效的。
答案 3 :(得分:0)
尝试使用此正则表达式匹配@ domainX.com:
[A-Za-z0-9!#$%&’*+-/=?^_`\.{|}~]+@domain[1-4]\.com
匹配
test@domain1.com
user123@domain4.com
以及更多
修改强>
匹配每个域使用此正则表达式:
[A-Za-z0-9!#$%&’*+-/=?^_`\.{|}~]+@([a-z0-9_-]+[\.]?)*