Angular2 Проверка ввода с помощью регулярных выражений

1

Я хочу определить количество символов в моем регулярном выражении

_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

Теги:
angular

1 ответ

1
Лучший ответ

Прежде всего 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 раздробилась от вас.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню