RegEx не работает в директиве - Angular 4 - PullRequest
0 голосов
/ 28 августа 2018

Я создал директиву, которая проверяет, что пользователь вводит в текстовое поле. Пользователь может вводить цифры, точки и запятые, но ничего больше.

Валидатор работает при вводе чисел, но я не могу вводить запятые и точки.

import { Directive, ElementRef, HostListener } from '@angular/core';

@Directive({
  selector: '[appInputValidator]'
})
export class InputValidatorDirective {

private regex: RegExp = new RegExp(/^[0-9]{1,2}([,.][0-9]{1,2})?$/);

// Allow key codes for special events
// Backspace, tab, end, home
private specialKeys: Array<string> = ['Backspace', 'Tab', 'End', 'Home'];

constructor(private el: ElementRef) {
}

@HostListener('keydown', ['$event'])
onKeyDown(event: KeyboardEvent) {
    debugger
    // Allow Backspace, tab, end, and home keys
    if (this.specialKeys.indexOf(event.key) !== -1) {
        return;
    }

    let current: string = this.el.nativeElement.value;
    let next: string = current.concat(event.key);
    if (next && !String(next).match(this.regex)) {
        event.preventDefault();
    }
}

}

Я протестировал регулярное выражение в сети, и оно работает для чисел, точек и запятых, но внутри приложения я не могу вводить точки или запятые. Что не так?

1 Ответ

0 голосов
/ 28 августа 2018

Вы можете использовать

private regex: RegExp = /^[0-9]{1,2}([,.][0-9]{0,2})?$/;
                                               ^

Обратите внимание, что {0,2} квантификатор дает [0-9] совпадение ноль , одну или две цифры, и, таким образом, 2. подобные значения больше не будут мешать пользователю вводить число с дробной частью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...