2014-02-01 1 views
-1

В григорианском календаре, если год делится на 400, то это високосный год. 2000 год - високосный год, когда 2100 нет. как бы вы реализовали (if year % 400 == 0), используя только конструкции регулярных выражений? реализация, если инструкция else будет считаться недействительной, так как это будет рассмотрено извне. решение будет проверяться, если февраль имеет 28 или 29 дней. Моя проблема связана с 4-значным годом (с 1000), но любое руководство к общему решению также будет очень полезно.Действительные даты в регулярном выражении

EDIT: Nevermind. Найдено Руководство. http://regexadvice.com/blogs/mash/archive/2004/04/02/Dealing-with-dates-and-leap-years.aspx

+3

Не отмечайте как ANSWERED, но добавьте ответ и отметьте его (или другой) – flup

ответ

0

Try This Regex

Это будет соответствовать високосный год.

((^(10|12|0?[13578])([/])(3[01]|[12][0-9]|0?[1-9])([/])((1[8-9]\d{2})|([2-9]\d{3}))$)|(^(11|0?[469])([/])(30|[12][0-9]|0?[1-9])([/])((1[8-9]\d{2})|([2-9]\d{3}))$)|(^(0?2)([/])(2[0-8]|1[0-9]|0?[1-9])([/])((1[8-9]\d{2})|([2-9]\d{3}))$)|(^(0?2)([/])(29)([/])([2468][048]00)$)|(^(0?2)([/])(29)([/])([3579][26]00)$)|(^(0?2)([/])(29)([/])([1][89][0][48])$)|(^(0?2)([/])(29)([/])([2-9][0-9][0][48])$)|(^(0?2)([/])(29)([/])([1][89][2468][048])$)|(^(0?2)([/])(29)([/])([2-9][0-9][2468][048])$)|(^(0?2)([/])(29)([/])([1][89][13579][26])$)|(^(0?2)([/])(29)([/])([2-9][0-9][13579][26])$)) 

Это будет соответствовать

мм/дд/гггг, м/дд/гггг, мм, д/гггг и м/д/гггг

Check Here

+0

Что делать, если дата когда-то в сентябре ['1752'] (http://en.wikipedia.org/wiki/ 1752)? – devnull

Смежные вопросы