Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Range out of order in character class in javascript

I don't know why my regex is incorrect:

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

I need this to validate an email. Example below: reEmail.test("[email protected]");

I get this error:

Range out of order in character class

like image 440
Wilker Iceri Avatar asked Jul 18 '13 15:07

Wilker Iceri


1 Answers

Because you create the RegExp using a String the _\-\. becomes _-. and that is the invalid range. (It is a range from _ to . and that is not correct)

You need to double escape it:

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

That way the \\ becomes a \ in the String and then is used to escape the -in the RegExp.

EDIT:

If you create RegExp by String it is always helpful to log the result so that you see if you did everything right:

e.g. your part of the RegExp

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

results in:

^([A-Za-z0-9_-.])+@ 
like image 162
t.niese Avatar answered Sep 21 '22 08:09

t.niese