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

标签 javascript jquery regex

我使用 jquery 验证器进行验证。我有 50 封免费电子邮件,例如(gmail.com、yahoo.com),所以我需要对其进行验证。我选择了一个数组,然后将所有电子邮件存储在一个数组中。下面请看我的代码可以看到我使用了正则表达式。我在正则表达式中传递了一个变量,但它对我不起作用。它抛出了这样的错误 SyntaxError: invalid range in character class

我的代码

$.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-.] 并且它是一个无效的字符类。此外,正则表达式定界符(模式周围的那些 /..../)永远不应在构造函数符号中使用,除非您确实需要匹配包含在 / 中的字符串.

此外,您的电子邮件包含非单词字符,您需要对它们进行转义。

使用

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

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

关于javascript - Jquery 使用验证器验证免费电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42558423/

相关文章:

javascript - WordPress 博客上带有 "display: none"的奇怪动态 CSS 类

javascript - 如何重新排序存储在 Mongo 中的这个数组中的项目?

javascript - 这在 JavaScript 子类中不可用

javascript - IE9(兼容模式)不提交表单

jquery - Codeigniter从 View 到 Controller 获取ajax值

regex - R中的模式替换

正则表达式用 Google 表格中的不同项目替换许多 "$"

php - WooCommerce:强制执行最小长度电话号码字段

javascript - 如何在 PHP 中使用 sweetalert2

jquery - 使用 <use> 标签更改 SVG 填充颜色不起作用