Range out of order in character class in javascript

javascript, regex, validation

Solution

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_-.])+@

Problem

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("contact@google.com.br");` I get this error: Range out of order in character class

Original source