web-dev-qa-db-fra.com

Plage hors ordre dans la classe de caractères en javascript

Je ne sais pas car mon regex est incorrect:

var domain = "google\.com\.br";
var reEmail = new RegExp("^([A-Za-z0-9_\-\.])+\@" + domain + "$");

J'en ai besoin pour valider un email, exemple: reEmail.test("[email protected]");

Je reçois cette erreur:

Plage hors de l'ordre dans la classe de caractères

31
Wilker Iceri

Parce que vous créez le RegExp à l'aide d'une chaîne, le _\-\. devient _-. et c'est la plage non valide. (C'est une gamme de _ à . et ce n'est pas correct)

Vous devez double échapper :

new RegExp("^([A-Za-z0-9_\\-\\.])+@" + domain + "$");

De cette façon, le \\ devient un \ dans la chaîne et est ensuite utilisé pour échapper à -dans RegExp.

MODIFIER:

Si vous créez RegExp par chaîne, il est toujours utile de consigner le résultat afin de voir si vous avez tout fait correctement:

par exemple. votre partie du RegExp

console.log("^([A-Za-z0-9_\-\.])+\@");

résulte en:

^([A-Za-z0-9_-.])+@
71
t.niese