简体   繁体   中英

Jquery validate free emails using validator

I used jquery validator for validation.I have 50 free emails like(gmail.com, yahoo.com) so I need validate it.I chose an array then stored all the emails within an array.Below see my code there you could see I used the regular expression.I passed a variable in regular expression but it doesn't work for me.It threw the error like this SyntaxError: invalid range in character class

My code

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

I will post an answer since it is not evident here what is going on, but the underlying reasons are quite common.

You are using a constructor notation to define the regex. It is a correct approach when you need to build a pattern dynamically using a variable. However, a literal backslash must be written as "\\\\" . All single backslashes are removed. Thus, you get an error since [\\w-.] turns into [w-.] and it is an invalid character class. Also, the regex delimiters (those /..../ around the pattern) should never be used in the constructor notation unless you really need to match a string enclosed with / .

Besides, your emails contain non-word chars, and you need to escape them.

Use

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

I also believe the dot in ([\\w-]+.)+ must be escaped, it is supposed to match a literal dot,

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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