Range out of order in character class in javascript

JavascriptRegexValidation

Javascript Problem Overview


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

Javascript Solutions


Solution 1 - Javascript

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionWilker IceriView Question on Stackoverflow
Solution 1 - Javascriptt.nieseView Answer on Stackoverflow