«Принятый» ответ на этот вопрос является как неправильным, так и близоруким.
Неправильно, потому что он будет соответствовать строкам типа 0001
, который не является действительным годом.
Это близорукость в том, что не соответствует любым значениям выше 9999. Мы уже забыли уроки Y2K ?Вместо этого используйте регулярное выражение:
^[1-9]\d{3,}$
Если вам нужно сопоставить годы в прошлом, помимо лет в будущем, вы можете использовать это регулярное выражение для сопоставления с любым положительным целым числом:
^[1-9]\d*$
Даже если вы не ожидаете дат из прошлого, вы все равно можете использовать это регулярное выражение, на тот случай, если кто-то изобрел машину времени и захочет забрать с собой ваше программное обеспечение.
Примечание: это регулярное выражение будет соответствовать всем годам, в том числе до года 1, так как они обычно представлены с обозначением BC вместо отрицательного целого числа.Конечно, это соглашение может измениться в течение следующих нескольких тысячелетий, поэтому ваш лучший вариант - сопоставить любое целое число - положительное или отрицательное - со следующим регулярным выражением:
^-?[1-9]\d*$