4

I am trying to validate a text string as a date before processing it, however both of the regex i have tried are throwing syntax errors and I can't see why. From what I can tell there is nothing wrong with either. These are the strings:

 var datePattern1 = new RegExp( (0[1-9]|1[012])[-](0[1-9]|[12][0-9]|3[01])[-](19|20)\d\d );

and

var datePattern2 = new RegExp( [0-3][0-9]-(0|1)[0-9]-(19|20)[0-9]{2} );

Appreciate any help.

3 Answers 3

12

You are missing the quotes around your expressions:

var datePattern1 = new RegExp( "(0[1-9]|1[012])[-](0[1-9]|[12][0-9]|3[01])[-](19|20)\d\d" );
var datePattern2 = new RegExp( "[0-3][0-9]-(0|1)[0-9]-(19|20)[0-9]{2}" );
Sign up to request clarification or add additional context in comments.

2 Comments

is it really as simple as that? doh
No, it's not that simple. Also the \d\d at the end has to be \\d\\d.
9

Either pass a string to the RegExp constructor as darin mentioned or use the RegExp syntax “/ … /”:

var datePattern1 = /(0[1-9]|1[012])[-](0[1-9]|[12][0-9]|3[01])[-](19|20)\d\d/;
var datePattern2 = /[0-3][0-9]-(0|1)[0-9]-(19|20)[0-9]{2}/;

Comments

3

The Regexp() constructor expects a string, so you need to quote your regex:

var datePattern2 = new RegExp('[0-3][0-9]-(0|1)[0-9]-(19|20)[0-9]{2}');

When using double quotes, watch out for backslash escapes in the regex. Alternatively, you can use the Perl syntax:

var datePattern2 = /[0-3][0-9]-(0|1)[0-9]-(19|20)[0-9]{2}/;

2 Comments

if you use the perl syntax do you then pass the var to the regex constructor?
No. The slash syntax is a "regex literal." No need to create a Regex object around it.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.