如果出现以下情况,不允许用户删除逗号/点

时间:2019-05-23 09:28:41

标签: javascript regex angular

我正在使用其他question的正则表达式,但在我的问题上发现了点号。

我想允许用户输入最多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

因此,如果在点用户之后可以有任意数字,那么他可以按需要多次击退空格,但是输入内容没有任何变化。

我可以在此指令中这样做吗?

1 个答案:

答案 0 :(得分:0)

更改正则表达式:

private regex: RegExp = new RegExp(/(^[0-9]{1,3})+([,.]{1}[0-9]{1,4}){0,1}$/g);