Я хочу определить количество символов в моем регулярном выражении
_keyPress(ptrn: string, event: any) {
const pattern = new RegExp(ptrn);
const inputChar = String.fromCharCode(!event.charCode ? event.which : event.charCode);
const value = event.target.value;
if (!pattern.test(inputChar) && !pattern.test(value)) {
event.preventDefault();
return false;
}
}
HTML:
<input (keypress)="_keyPress('[a-z]{,6}', $event)">
Но это не работает, если я использую квантификатор количества. Кто может сказать, что пойдет не так? https://plnkr.co/edit/fIVAvRJcubzD2SxZqlTY?p=preview
Прежде всего event.charCode
возвращает число от 97
до 122
для az
. Таким образом, тест pattern.test(inputChar)
всегда терпит неудачу, потому что вы пытаетесь сравнить цифры с алфавитами. Итак, измените inputChar
следующим образом:
const inputChar = String.fromCharCode(event.key? event.which: event.key);
Кроме того, значение необходимо обновить с помощью следующего ключа, введенного пользователем:
const value = (event.target.value) + inputChar;
Я предполагаю, что вы пытаетесь запретить пользователю вводить любые ключи, кроме az
и разрешать им вводить до 6 алфавитов. Поэтому для окончательного теста требуется ||
флаг вместо &&
, потому что вход должен быть разрешен, когда оба теста проходят, а не только когда один из них проходит.
if (!pattern.test(inputChar) || !pattern.test(value)) {
event.preventDefault();
return false;
}
Здесь демо-версия Plnkr раздробилась от вас.