Angular2:IE中的数字验证

时间:2017-06-15 17:34:16

标签: javascript regex angular typescript

我试图在IE 11中进行数字验证。我指的是to the post。我无法验证2位数和3位小数的数字。 IE 11的打字稿是否支持正则表达式?或者还有其他方法来验证号码吗?

<%= yield %>

Plunker

1 个答案:

答案 0 :(得分:0)

请参阅此Plnkr demo

注意:数字键盘中的点(。)不会在IE中注册为键盘事件事件。但常规键盘中的点(逗号[,]和斜杠[/]之间)可正常工作。

此外,keypress不会注册退格键,因此我为它添加了单独的事件处理。

以下是示例代码:

HTML:

<input type="number" name="amount" [(ngModel)]="amount" 
            (keypress)="validateNum($event, amount)" 
            (keydown.backspace)="handleBS()"/>`

App.ts:

data: string = "";

  validateNum(event: KeyboardEvent, amount): void {

    let pattern = new RegExp("^\d{1,3}[.]\d{1,3}$");

    console.log(this.data);

    if(amount == undefined){
      pattern = new RegExp("^[0-9]{1}$");
    }

    if(this.data.length >= 1 && this.data.length < 3){
       pattern = new RegExp("^[1-9]{1,3}$");
    }

    if(this.data.length == 3){
       pattern = new RegExp("^[0-9]{1,3}[.]$");
    }

    if(this.data.length > 3){
       pattern = new RegExp("^[0-9]{1,3}[.][0-9]{1,3}$");
    }

    if(this.data.length > 7){
       return false;
    }

    if(!pattern.test(this.data + event.key)) {
        return false;
    }
    this.data = this.data + event.key;
    return true;
  }

  handleBS(){
    this.data = this.data.slice(0, this.data.length - 1);
  }