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

Javascript Jquery使用验证器验证免费电子邮件,javascript,jquery,regex,Javascript,Jquery,Regex,我使用jquery验证程序进行验证。我有50封免费电子邮件,比如(gmail.com,yahoo.com)所以我需要验证它。我选择了一个数组,然后将所有电子邮件存储在一个数组中。下面是我的代码,你可以看到我使用了正则表达式。我在正则表达式中传递了一个变量,但它对我无效。它抛出了如下错误语法错误:字符类中的无效范围 我的代码 $.validator.addMethod('nofreeemail', function (value) { var emails = ["gmail.com","y

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

我的代码

$.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.');

我将发布一个答案,因为这里不清楚发生了什么,但潜在的原因很常见

您正在使用构造函数表示法来定义正则表达式。当您需要使用变量动态构建模式时,这是一种正确的方法。但是,文字反斜杠必须写成
“\\”
。删除所有单个反斜杠。因此,由于
[\w-.]
变为
[w-.]
并且它是一个无效的字符类,因此会出现错误。此外,除非您确实需要匹配包含
/
的字符串,否则在构造函数表示法中不应使用正则表达式分隔符(模式周围的那些
/../

此外,您的
电子邮件中包含非文字字符,您需要避开它们

使用


我还认为
([\w-]+)+
中的点必须转义,它应该匹配一个文字点,

既然您不关心电子邮件地址的第一部分,为什么不在
@
处拆分它,并对照您的免费主机列表检查第二部分?从构造函数符号中删除regex分隔符。您传递的是字符串文本模式,而不是正则表达式文本。和双反斜杠并转义
val
var regex=new RegExp(“^([\\w-.]+@(?!+val.replace(/[-\/\\^$*+?。”)([\\w-]+\.+[\\w-]{2,4})”)。我还认为
([\w-]+]+
中的点必须转义,它应该匹配一个文字点,对吗?为什么不干脆
var regex=new RegExp(“/^([\w-.]+@“+val+”$”);
@karthigh,它工作了吗?@WiktorStribiżew,我在我的本地服务器和浏览器控制台(chrome,firefox)上试用了你的代码但我得到了这样的错误:非法字符
var regex = new RegExp("^([\\w-.]+@(?!"+val.replace(/[-\/\\^$*+?.()|[\]{}]/g,'\\$&')+")([\\w-]+\\.)+[\\w-]{2,4})?$");