Joe Essey
Joe Essey

Reputation: 3527

Cannot get jQuery validation to work with MM/DD/YYYY

I have a custom regex method:

$.validator.addMethod(
    "dateRegex",
       function(value, element, regexp) {
         var re = new RegExp(regexp);
         return this.optional(element) || re.test(value);
       },
       "Date must be in the format MM/DD/YYYY"
 );

I've got jQuery validation on a date field that looks like this:

rules:
      date:
        {
        required: true,
        dateRegex: '^(0[1-9]|1[012])[- //.](0[1-9]|[12][0-9]|3[01])[- //.](19|20)\d\d$',
        maxlength: 10
        }
      }
messages: {
    lossDate: {
    required: "Unable to proceed, search field is empty"
    }   
}

When I enter a valid date, for example 08/06/2013, "Date must be in the format MM/DD/YYYY" is displayed. Does anyone see a mistake in my regex, or is the problem outside of that?

The test data passes here: http://regexpal.com/

Also, I have the following working in my app:

$.validator.addMethod(
    "regex",
    function(value, element, regexp) {
       var re = new RegExp(regexp);
       return this.optional(element) || re.test(value);
    },
    "Invalid number of characters entered."
);

number: 
      {
    required: true,
    regex: '^(.{7}|.{9}|.{11}|.{12}|.{15})$' 
      },...

Upvotes: 0

Views: 1466

Answers (1)

Bergi
Bergi

Reputation: 664569

I guess that plugin doesn't want strings for regexes. Instead of a string literal, put a regex literal:

…,
dateRegex: /^(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.](19|20)\d\d$/,
…

You also can simplify the function then:

function(value, element, regexp) {
    return this.optional(element) || regexp.test(value);
}

Upvotes: 3

Related Questions