2017-06-15 9 views
0

私はIE 11で番号の検証をしようとしています。私はto the postを参照していました。私は2桁と3小数で数字を検証することができません。 IE 11のtypescriptは正規表現をサポートしていますか?または、番号を検証する他の方法はありますか?Angular2:IEの番号検証

validateNum(event: KeyboardEvent): void { 
    const pattern = /^\d{1,3}[.]\d{1,3}$/; 
    let inputChar = String.fromCharCode(event.charCode); 
    if(!pattern.test(inputChar)) { 
     event.preventDefault();; 
    } 

Plunker

答えて

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); 
    }