Kimchi Man
Kimchi Man

Reputation: 1171

JavaScript regular expression to get valid date format "MM/dd/yyyy"

I am learning JavaScript Regular Expression.

I am writing a function to check valid date format, 'MM/dd/yyyy'.

function isValidDate(dateStr) {
    var result = dateStr.match(/^(0?[1-9]|1[012])\/(0?[1-9]|[12][0-9]|3[01])\/(199\d)|([2][0]\d{2})$/);
    if(result)
        return true;
    return false;
}

It works fine, but I got some issues.

01/01/2014 // return true
01/1/2014  // return true (it should return false)
1/01/2014  // return true (it should return false)

I don't want the function to return true when the month.length is 1. I want to make sure that the month.length == 2 && the date.length == 2. How can I modify my regular expression?

EDIT

01/01/20 // return true (it should return false)

How can I make sure that the year.length == 4?

Upvotes: 0

Views: 776

Answers (3)

gconsidine
gconsidine

Reputation: 155

Here's what I'd go with:

/^(0)[1-9]{1}|(1)[0-2]{1}\/([0-2]{1}[0-9]{1}|3[0-1]{1})\/\d{4}$/

It depends on your application -- you said you wanted four digit years, but didn't specify recent years, so I left out the restriction on dates being > 199*

You can test it here: http://regexr.com/39ae1

Upvotes: 1

p.s.w.g
p.s.w.g

Reputation: 149010

In your pattern, the leading zeros are optional because of the 'zero-or-one' quantifiers (?). Simply remove them to make the zeros required.

Also, you need to wrap your year portion in a single group, and [2][0] can be simplified to 20. Try this:

/^(0[1-9]|1[012])\/(0[1-9]|[12][0-9]|3[01])\/(199\d|20\d{2})$/

Finally, You can simply use test rather than match:

function isValidDate(dateStr) {
    return /^(0[1-9]|1[012])\/(0[1-9]|[12][0-9]|3[01])\/(199\d|20\d{2})$/.test(dateStr);
}

This will give you the results you want:

  • isValidDate("01/01/2014")true
  • isValidDate("01/1/2014")false
  • isValidDate("1/01/2014")false

Upvotes: 1

Don Rhummy
Don Rhummy

Reputation: 25820

Try this:

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

Upvotes: 1

Related Questions