@inpactor666

Теоретически возможно ли дать регулярное выражение, которое правильно принимает 29 февраля, только тогда, когда данный год действительно високосный?

Теоретически возможно ли дать регулярное выражение, которое правильно принимает 29 февраля, только тогда, когда данный год действительно високосный?
  • Вопрос задан
  • 470 просмотров
Пригласить эксперта
Ответы на вопрос 4
dollar
@dollar
Делай добро и бросай его в воду.
Високосный год:
\d\d(?:[02468][048]|[13579][26])
Ответ написан
Alexandroppolus
@Alexandroppolus
кодир
из википедии

год, номер которого кратен 400, — високосный;
остальные годы, номер которых кратен 100, — невисокосные (например, годы 1700, 1800, 1900, 2100, 2200, 2300);
остальные годы, номер которых кратен 4, — високосные[5].
все остальные годы — невисокосные.


регулярка, которая проверяет, что число - високосный год (без нулей впереди):
/^(?!0+)\d*(?:[48]|(?:[48]|[02468][048]|[13579][26])00|(?:(?!00$)[02468][048]|[13579][26]))$/


для года фиксированной длины, с нулями впереди, если нужно
/^(?=\d{4}$)(?!0+$)\d*(?:(?:[02468][048]|[13579][26])00|(?!00$)(?:[02468][048]|[13579][26]))$/gm

(самое первое число - длина)
Ответ написан
Комментировать
ProgrammerForever
@ProgrammerForever
Учитель, автоэлектрик, программист, музыкант
c 1900 по 2100
29\.0?2\.(1904|1908|1912|1916|1920|1924|1928|1932|1936|1940|1944|1948|1952|1956|1960|1964|1968|1972|1976|1980|1984|1988|1992|1996|2000|2004|2008|2012|2016|2020|2024|2028|2032|2036|2040|2044|2048|2052|2056|2060|2064|2068|2072|2076|2080|2084|2088|2092|2096)

Если нужен более широкий диапазон дат, то вы или оптимист (2100+) или историк (1900-)
Ответ написан
AgentSmith
@AgentSmith
Это мой правильный ответ на твой вопрос
распределение високосных годов:

год, номер которого кратен 400, — високосный;
остальные годы, номер которых кратен 100, — невисокосные (например, годы 1700, 1800, 1900, 2100, 2200, 2300);
остальные годы, номер которых кратен 4, — високосные[5].
все остальные годы — невисокосные.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы