Я бы, по возможности, не решил это в одном регулярном выражении. Вы должны разделить ввод пользователя. Например: YYYY.mm.DD
разделить на [YYYY],[.],[mm],[.],[DD]
.
Теперь вы можете проверить каждую группу, подходит ли она для ваших целей.
Говоря о Годе рождения, вы не допустите hh:mm.ss
или День года и т. Д.
Это позволяет вам дать пользователю ответ, например: «Определение года отсутствует» или «Часы не разрешены».