正则表达式:如何匹配特定域列表

时间:2014-02-24 10:12:42

标签: javascript jquery regex

我需要一个与电子邮件地址中特定域名列表匹配的正则表达式。 我知道这可能不是一个受欢迎的问题,但它是供内部使用的,以及有限的电子邮件地址列表。我喜欢10-12个域名,我需要能够匹配。

域名不包含子域或点,后缀始终相同,如:

*@onedomain.com
*@anotherdomain.com
*@thirddomain.com

我试过这个:

/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@(?i)(onedomain|anotherdomain|thirddomain|domain4)\.com$/

但我收到此错误:语法无效。 请问有人帮忙吗? 感谢。

4 个答案:

答案 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_-]+[\.]?)*