Второй вопрос касается самой директивы.Директива сравнивает односимвольный ввод с регулярным выражением, предназначенным для всей строки :
if (!regex.test(key)) {
event.preventDefault();
return false;
}
Если вы хотите проверить правильность всей строкив случае события keypress
это не сработает.Событие нажатия клавиши сообщает вам, какая клавиша была нажата, а не какая строка будет , если клавиша будет принята.Как правило, вы хотите проверить всю строку по регулярному выражению после того, как значение изменилось, как в случае input
.Это означает, что вы не сможете отменить нажатия клавиш, но это все равно будет необычный UX.Например, клавиши backspace и arrow являются нажатиями клавиш, и их оценка в контексте регулярного выражения не имеет большого смысла.Возможно, вы захотите рассмотреть UX UX, а не предотвращение нажатия клавиш.