Нет 100% беспроблемного решения того, что вы хотите сделать.Проблема в том, что текстовые поля предназначены для ввода любого текста.Когда вы пытаетесь переопределить поведение, вы можете переопределить его только частично и по-разному в разных браузерах.
Здесь много сложных проблем.Во-первых, что если кто-то поставит недопустимую дату, например 29 февраля, на не високосный год.
Кроме того, где вы связываете свои правила валидации?Если вы сделаете это в keyup, персонаж войдет в игру, затем вы подтвердите и удалите его.Если вы делаете это при нажатии клавиш, вы должны попытаться предотвратить поведение по умолчанию, а затем заменить его своей собственной логикой.Что вы делаете, если кто-то вставит правой кнопкой мыши неверный номер?
Лично я бы использовал стиль html-5 <input type="date" />
, который позволяет людям с современными браузерами воспользоваться преимуществами лучшей проверки ввода, безвызывая потенциальные проблемы с необычными браузерами / обстоятельствами.
Я думаю, что лучше проверить после того, как дата была отправлена, или, возможно, на вводе даты теряет фокус, а не пытаться заблокировать ввод.