Вы можете использовать это регулярное выражение:
[12]\d{3}(?:(?:-(?:0[1-9]|1[0-2]))(?:-(?:0[1-9]|[12]\d|3[01]))?)?
В основном это соответствует году, затем создается группа без захвата с month
и date
. Часть date
в этой группе optional
, а the Whole Group
с месяцем и датой также optional
.
Это означает, что он будет соответствовать только годам, годам и месяцам, а полные даты указывать год, месяц и дату.
Редактировать (добавлены якоря):
^[12]\d{3}(?:(?:-(?:0[1-9]|1[0-2]))(?:-(?:0[1-9]|[12]\d|3[01]))?)?$
Теперь он не будет совпадать с '2018-ааа'.