Monday, April 25, 2011

Why do these javascript regex throw syntax errors?

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.

From stackoverflow
  • 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}" );
    
    MalcomTucker : is it really as simple as that? doh
    Guffa : No, it's not that simple. Also the \d\d at the end has to be \\d\\d.
  • 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}/;
    
  • 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}/;
    
    MalcomTucker : if you use the perl syntax do you then pass the var to the regex constructor?
    Rob Kennedy : No. The slash syntax is a "regex literal." No need to create a Regex object around it.

0 comments:

Post a Comment