Jquery使用验证器验证免费电子邮件

时间:2017-03-02 14:44:21

标签: javascript jquery regex

我使用jquery验证器进行验证。我有50封免费电子邮件,如(gmail.com,yahoo.com),所以我需要验证它。我选择了一个数组然后将所有电子邮件存储在一个数组中。我看到我的代码在那里你我可以看到我使用正则表达式。我在正则表达式中传递了一个变量,但它对我不起作用。它抛出了这样的错误 SyntaxError:字符类中的无效范围

我的代码

$.validator.addMethod('nofreeemail', function (value) {
   var emails = ["gmail.com","yahoo.com","hotmail.com"]
   $.each(emails,function(i, val){
     console.log("email", val)
     var regex = new RegExp("/^([\w-.]+@(?!"+val+")([\w-]+.)+[\w-]{2,4})?$/");
     console.log("regex", regex)
     return regex.test(value);
   });
}, 'Free email addresses are not allowed.');

1 个答案:

答案 0 :(得分:2)

我会发布一个答案,因为这里不清楚发生了什么,但其根本原因很常见。

您正在使用构造函数表示法来定义正则表达式。当您需要使用变量动态构建模式时,这是一种正确的方法。但是,必须将文字反斜杠写为"\\"。所有单个反斜杠都被删除。因此,您会收到错误,因为[\w-.]变为[w-.]并且它是无效的字符类。此外,除非您确实需要匹配用/..../括起的字符串,否则永远不应在构造函数表示法中使用正则表达式分隔符(模式周围的/)。

此外,您的emails包含非单词字符,您需要将它们转义。

使用

var regex = new RegExp("^([\\w-.]+@(?!"+val.replace(/[-\/\\^$*+?.()|[\]{}]/g,'\\$&')+")([\\w-]+\\.)+[\\w-]{2,4})?$");

我也相信([\w-]+.)+中的点必须被转义,它应该与文字点匹配,