0

The following regex check is not working in the code. But if i use this pattern at regex101.com it works perfectly

var pattern = "^([a-zA-Z0-9]([-\.\w]*[a-zA-Z0-9])*@([a-zA-Z0-9][-\w]*[a-zA-Z0-9]\.)+[a-zA-Z]{2,9})$";
var value = "test@user.com";

var regexp = new RegExp(pattern);
if (!regexp.test(value)) {
   alert("Failed");
} else {
 alert("passed");
}

Could you please help me why this is happening here. By the way if i make some modifications like given below, it works. But i want it to work with (new RegExp(pattern))

var pattern = /^([a-zA-Z0-9]([-\.\w]*[a-zA-Z0-9])*@([a-zA-Z0-9][-\w]*[a-zA-Z0-9]\.)+[a-zA-Z]{2,9})$/;
var value = "test@user.com";

if (!pattern.test(value)) {
   alert("Failed");
} else {
 alert("passed");
}
Amrinder
  • 69
  • 6
  • 1
    *But i want it to work with (new RegExp(pattern)* Why? –  Nov 04 '16 at 03:40
  • @torazaburo got the answer.. I need to add extra backslash in regular expression infront of each backslash. because "new regExp(pattern)" was stripping backslashes from the pattern and thats why it was not working. – Amrinder Nov 07 '16 at 00:49

2 Answers2

3

Just remove the double quotes and put your Regex simply in forward slashes.

var pattern = /^([a-zA-Z0-9]([-\.\w]*[a-zA-Z0-9])*@([a-zA-Z0-9][-\w]*[a-zA-Z0-9]\.)+[a-zA-Z]{2,9})$/;
var value = "test@user.com";

var regexp = new RegExp(pattern);
if (!regexp.test(value)) {
   alert("Failed");
} else {
 alert("passed");
}

It's because, if you're putting double quotes, then you need to escape your regular expression

However, you can simply put your regular expression as it is when placing it between forward slashes.

Raman Sahasi
  • 30,180
  • 9
  • 58
  • 71
0

You need to escape those backslashes (\).

var pattern = "^([a-zA-Z0-9]([-\\.\\w]*[a-zA-Z0-9])*@([a-zA-Z0-9][-\\w]*[a-zA-Z0-9]\\.)+[a-zA-Z]{2,9})$";
var value = "test@user.com";

var regexp = new RegExp(pattern);
if (!regexp.test(value)) {
   console.log("Failed");
} else {
 console.log("passed");
}
Niyoko
  • 7,512
  • 4
  • 32
  • 59