/ / Jquery valide des emails gratuits avec validator - javascript, jquery, regex

Jquery valider des emails gratuits en utilisant validateur - javascript, jquery, regex

J'ai utilisé le validateur JQuery pour la validation.J'ai 50 e-mails gratuits comme (gmail.com, yahoo.com). Il me faut donc le valider.J'ai choisi un tableau, puis stocké tous les e-mails au sein d'un tableau.Vosions voir mon code, vous pouvez voir que j'ai utilisé l'expression régulière.J'ai passé une variable dans une expression régulière mais cela ne fonctionne pas pour moi.Il a jeté l'erreur comme ceci SyntaxError: plage invalide dans la classe de caractères

Mon 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.");

Réponses:

2 pour la réponse № 1

Je vais poster une réponse car ce qui se passe n’est pas évident ici, mais les raisons sous-jacentes sont assez courantes.

Vous utilisez une notation de constructeur pour définir l'expression régulière. C'est une approche correcte lorsque vous devez créer un motif de manière dynamique à l'aide d'une variable. Toutefois, une barre oblique inverse littérale doit être écrite comme suit: "\". Toutes les barres obliques inverses sont supprimées. Ainsi, vous obtenez une erreur depuis [w-.] se transforme en [w-.] et c'est une classe de caractères invalide. En outre, les délimiteurs de regex (ceux /..../ autour du motif) ne doit jamais être utilisé dans la notation du constructeur, sauf si vous avez vraiment besoin de faire correspondre une chaîne entourée de /.

En plus, votre emails contient des caractères autres que des mots, et vous devez y échapper.

Utilisation

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

Je crois aussi le point en ([w-]+.)+ doit être échappé, il est censé correspondre à un point littéral,