【问题标题】:Do not allow user to delete coma/dot if不允许用户删除逗号/点,如果
【发布时间】:2019-05-23 09:28:41
【问题描述】:

我正在使用来自其他 question 的正则表达式,但在我的情况下,我发现 dot 存在问题。

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

因此,如果点后有任何数字,用户可以根据需要多次按退格键,但输入中没有任何变化。

我可以在这个指令这里做吗?

【问题讨论】:

    标签: javascript regex angular


    【解决方案1】:

    更改正则表达式:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-02
      • 1970-01-01
      • 1970-01-01
      • 2014-01-05
      • 1970-01-01
      相关资源
      最近更新 更多