Регулярное выражение для формата даты и времени «ММ / ДД / ГГ ЧЧ: мм: сс AM / PM» в валидаторе регулярных выражений asp.net - PullRequest
3 голосов
/ 22 августа 2009

Может кто-нибудь сказать мне формат регулярного выражения для «ММ / ДД / ГГ ЧЧ: мм: сс AM / PM», чтобы использовать его в валидаторе регулярного выражения в asp.net 2.0

Ответы [ 7 ]

5 голосов
/ 22 августа 2009

Я настоятельно рекомендую вам не использовать регулярные выражения для этого. Вместо этого вы должны создать свой собственный валидатор (наследовать BaseValidator) и использовать DateTime.TryParseExact, чтобы проверить возможность преобразования значения в DateTime.

2 голосов
/ 06 ноября 2013

Это сработало для меня

^(?=\d)(?:(?:(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})|(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))|(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2}))($|\ (?=\d)))?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$

Источник регулярного выражения

2 голосов
/ 09 июня 2012

Старый вопрос, но часто задаваемый.

RegEx для сопоставления всех дат, включая високосные годы.

Для формата ДД-ММ-ГГГГ

^(?:31#(?:(?:0[13578])|(?:1[02]))#)|(?:(?:29|30)#(?:(?:0[1,3-9])|(?:1[0-2]))#)(?:(?:1[6-9]|[2-9]\d)\d{2})$|^(?:29#02#(?:(?:(?:1[6-9]|[2-9]\d)(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:(?:0[1-9])|(?:1\d)|(?:2[0-8]))#(?:(?:0[1-9])|(?:1[0-2]))#(?:(?:1[6-9]|[2-9]\d)\d{2})$

Для формата MM-DD-YYYY

^(?:(?:(?:0?[13578]|1[02])#31)\1|(?:(?:0?[1,3-9]|1[0-2])#(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:0?2#29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:(?:0?[1-9])|(?:1[0-2]))#(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$

Пожалуйста, измените # в регистре, используя желаемый разделитель даты. Для глобального разделителя замените # на (/|-|.)

RegEx проверено на следующие даты и успешно работает. Производительность также в списке.

29-02-2000 ---> true
millis 2
29-02-2006 ---> false
millis 0
29-02-2001 ---> false
millis 0
30-02-2000 ---> false
millis 0
31-11-2000 ---> false
millis 0
29-13-2000 ---> false
millis 0
31-11-2000 ---> false
millis 0
31-07-2000 ---> true
millis 0
31-08-2000 ---> true
millis 1
31-12-2000 ---> true
millis 0
30-11-2011 ---> true
millis 0
17-07-2011 ---> true
millis 0
04-10-1987 ---> true
millis 0
01-01-1900 ---> true
millis 0
24-05-88 ---> false
millis 0
24-05-88 ---> false
millis 0
29-12-2011 ---> true
millis 0
31-12-2000 ---> true
millis 0
1-1-2010 ---> false
millis 0
1-1-99 ---> false
millis 0
1-01-99 ---> false
millis 0
01-1-99 ---> false
millis 0
1 голос
/ 22 августа 2009

Для проверки на стороне клиента (JavaScript) вы можете использовать

^\d\d/\d\d/\d\d \d\d:\d\d:\d\d [AP]M$

, который будет проверять синтаксис (цифры, пробелы, разделители), строго , против вашей спецификации. Если совпадение получено, вам необходимо проверить диапазоны введенных значений (например, 1 <= месяц <= 12 и т. Д.) В подгруппах для возвращенного совпадения. </p>

Используйте этот сайт , чтобы проверить регулярное выражение.

0 голосов
/ 24 июня 2014

Проверьте это. Это также подтверждает високосный год.

^(((0[13578]|1[02])[\/\.-](0[1-9]|[12]\d|3[01])[\/\.-]((19|[2-9]\d)\d{2})\s(0[0-9]|1[0-2]):(0[0-9]|[1-59]\d):(0[0-9]|[1-59]\d)\s(AM|am|PM|pm))|((0[13456789]|1[012])[\/\.-](0[1-9]|[12]\d|30)[\/\.-]((19|[2-9]\d)\d{2})\s(0[0-9]|1[0-2]):(0[0-9]|[1-59]\d):(0[0-9]|[1-59]\d)\s(AM|am|PM|pm))|((02)[\/\.-](0[1-9]|1\d|2[0-8])[\/\.-]((19|[2-9]\d)\d{2})\s(0[0-9]|1[0-2]):(0[0-9]|[1-59]\d):(0[0-9]|[1-59]\d)\s(AM|am|PM|pm))|((02)[\/\.-](29)[\/\.-]((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))\s(0[0-9]|1[0-2]):(0[0-9]|[1-59]\d):(0[0-9]|[1-59]\d)\s(AM|am|PM|pm)))$

06/12/2014 12:45:56 AM // true
11-12-1965 06:04:34 PM // true
11/31/2015 11:40:00 AM // false
12-31-1945 01:38:09 PM // true
02/29/2012 09:04:10 AM // true [leap year]
02/29/2013 09:04:10 AM // false
06.12.2014 13:04:10 AM // false

Демо

0 голосов
/ 20 февраля 2012
     (0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d

Формат: ММ-ДД-ГГГГ

0 голосов
/ 07 сентября 2009

Можете ли вы попробовать это

(0[1-9]|1[012])/(0[1-9]|[12][0-9]|3[01])/\d\d (0[0-9]|1[0-9]|2[0-4]):([0-5][0-9]):([0-5][0-9]) [AM|PM]

Надеюсь, это решит вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...