繁体   English   中英

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

[英]Jquery validate free emails using validator

我使用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.');

我将发布一个答案,因为目前尚不清楚发生了什么,但是潜在的原因很普遍。

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

此外,您的emails包含非单词字符,您需要对其进行转义。

采用

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM