I have the following which works fine, allowing a form field to be valid if blank or containing the word “hello” or passing the other validation…
var re = new RegExp(/^$|^[hello]|^([FG]?\d{5}|\d{5}[AB])$/);
but I want to make the word “hello” be the value of a variable.
I have tried this but it no longer seems to work:
var i = "hello";
var re = new RegExp('/^$|^['+i+']|^([FG]?\d{5}|\d{5}[AB])$/');
There are several things wrong in your code.
RegExpexpects a string, not a regex literal like you pass in the first case. It seems thatRegExpis smart enough though and detects that you are passing a regex literal. So your first example works by coincidence and is the same as:The
/are not part of the expression, they are the delimiters to denote a regex literal, much like quotation marks (') indicate a string literal. Hence, if you pass the expression as string toRegExp, it should not contain/.Since the backslash is the escape character in strings as well, in order to create a literal backslash for the expression you have to escape it:
\\.[hello]does not test for for the wordhello, it matches eitherh,e,loro, thus it is equivalent to[ehlo].With all that said, your code should be: