Я работаю над регулярным выражением, которое должно соответствовать григорианским датам месяц-день-год (в javascript), и оно отлично работает для января, марта, мая, июля, августа, октября и декабря (31-дневные месяцы) ) даты, но по какой-то причине, которую я не смог выяснить, она не будет совпадать ни с одной датой из любого другого месяца.
Небольшое объяснение приведенного ниже кода: я настроил его так, чтобы он сначала совпадал с частью дня месяца в месяце, поэтому он не совпадает, например, с 31 февраля. Итак, в настоящее время он соответствует (((31-дневный месяц) THEN (не алфавитно-цифровой символ, захвачен) THEN (день с 1 по 31)) OR ((28-дневный месяц) THEN (не захвачено буквенно-цифровой символ) THEN (день с 1 по 29)) OR ((30-дневный месяц) THEN (не буквенно-цифровой символ, захвачено) THEN (день с 1 по 30))) THEN (ранее захваченный символ) ТОГДА (прошлый или текущий год нашей эры).
Я уверен, что проблема проста, но я просто не вижу ее.
^
(?:
(?:
(?:0?[13578]|1[02])
([^\dA-Za-z])
(?:0?[1-9]|1[0-9]|2[0-9]|3[01])
)
|
(?:
(?:0?2)
([^\dA-Za-z])
(?:0?[1-9]|1[0-9]|2[0-9])
)
|
(?:
(?:0?[469]|11)
([^\dA-Za-z])
(?:0?[1-9]|1[0-9]|2[0-9]|30)
)
)
\1
(?:0{0,3}[1-9]|0{0,2}[1-9][0-9]|0?[1-9][0-9]{2}|1[0-9]{3}|200[0-9]|201[01])
$