Не позволяйте пользователю удалять кома / точку, если - PullRequest
0 голосов
/ 23 мая 2019

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

Я хочу разрешить пользователю размещать не более 3 цифр, затем запятую или точку, которую я заменяю точкой, в противном случае, затем до 4 цифр, и это прекрасно работает.

export class DecimalValidator {
  private regex: RegExp = new RegExp(/(^[0-9]{1,3})+([,.][0-9]{0,4}){0,1}$/g);
  private specialKeys: Array<string> = ['Backspace', 'Tab', 'End', 'Home', 'ArrowLeft', 'ArrowRight', 'Del', 'Delete', ',', '.'];

  constructor(private el: ElementRef) {
  }

  @HostListener('keydown', ['$event'])
  onKeyDown(event: KeyboardEvent) {
    if (this.specialKeys.includes(event.key)) {
      return;
    }
    const current: string = this.el.nativeElement.value;
    const position = this.el.nativeElement.selectionStart;
    let next: string = [current.slice(0, position), event.key === 'Decimal' ? '.' : event.key, current.slice(position)].join('');
    next = next.replace(/[,.]/g, m => (m === ',' ? '.' : '.'));

    if (next && !String(next).match(this.regex)) {
      event.preventDefault();
    }
  }
}

Я хочу разрешить пользователю удалять точку, если после точки нет цифр, но не разрешать ее, если после точки есть цифры.

#ALLOW: 123.
#NOT ALLOW: 123.2

Таким образом, если после точки точка есть какие-либо числа, пользователь может нажимать клавишу Backspace столько раз, сколько ему нужно, но это ничего не меняет на входе.

Могу ли я сделать это здесь, в этой директиве?

1 Ответ

0 голосов
/ 23 мая 2019

изменить регулярное выражение:

private regex: RegExp = new RegExp(/(^[0-9]{1,3})+([,.]{1}[0-9]{1,4}){0,1}$/g);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...