0

I want a regex which works for following criteria for a DateTime:

  1. DateTime must be in MM/dd/yyyy hh:mm:ss AM/PM

  2. If only date is entered in MM/dd/yyyy then also it is valid.

  3. In date month and day must be in two digit.

I tried following regular expression but it don't work for some dates like: 12/12/2012

[RegularExpression(@"^((((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|([1-2][0-9]))))[\-\/\s]?\d{2}(([02468][048])|([13579][26])))|(((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))[\-\/\s]?\d{2}(([02468][1235679])|([13579][01345789]))))(\s(((0?[1-9])|(1[0-2]))\:([0-5][0-9])((\s)|(\:([0-5][0-9])\s))([AM|PM|am|pm]{2,2})))?$", ErrorMessage = "Please enter valid date.")]
Dhwani
  • 7,484
  • 17
  • 78
  • 139

1 Answers1

2

If you insist on regex solution, I modified yours a bit (to restrict it to rules you provided):

^(?:(?:(?:(?:(?:(?:0[13578])|(?:1[02]))\/(?:(?:0[1-9])|(?:[1-2][0-9])|(?:3[01])))|(?:(?:(?:0[469])|11)\/(?:(?:0[1-9])|(?:[1-2][0-9])|30))|(?:02\/(?:(?:0[1-9])|(?:[1-2][0-9]))))\/\d{2}(?:(?:[02468][048])|(?:[13579][26])))|(?:(?:(?:(?:(?:0[13578])|(?:1[02]))\/(?:(?:0[1-9])|(?:[1-2][0-9])|(?:3[01])))|(?:(?:(?:0[469])|(?:11))\/(?:(?:0[1-9])|(?:[1-2][0-9])|(?:30)))|(?:02\/(?:(?:0[1-9])|(?:1[0-9])|(?:2[0-8]))))\/\d{2}(?:(?:[02468][1235679])|(?:[13579][01345789]))))(?:\s(?:(?:(?:0[1-9])|(?:1[0-2]))\:(?:[0-5][0-9])(?:\:(?:[0-5][0-9])\s))(?:AM|PM|am|pm))?$

Regular expression visualization

Demo

Slightly simplified regex (correctly validates dates in 0000-9999 range):

^(?:(?:(?:(?:(?:0[13578]|1[02])\/(?:0[1-9]|[1-2][0-9]|3[01]))|(?:(?:0[469]|11)\/(?:0[1-9]|[1-2][0-9]|30))|(?:02\/(?:0[1-9]|1[0-9]|2[0-8]))))\/\d{4}|02\/29\/(?:(?:\d{2}(?:04|08|[2468][048]|[13579][26]))|(?:(?:[02468][048])|[13579][26])00))(?:\s(?:0[1-9]|1[0-2])\:[0-5][0-9]\:[0-5][0-9]\s(?:AM|PM|am|pm))?$

Regular expression visualization

Demo

Ulugbek Umirov
  • 12,719
  • 3
  • 23
  • 31