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