![](/img/trans.png)
[英]Angular 2/4 need a Typescript regex to only allow numbers to be entered into input textbox
[英]Allow only numbers in a text input with Angular
我正在嘗試編寫只允許文本輸入文本中的數字的代碼。 我編寫了以下指令。
import { Directive, ElementRef, Input, HostListener } from '@angular/core'
@Directive({
selector: '[appAllowNumberonly]'
})
export class AllowNumberonlyDirective {
private el: HTMLInputElement;
constructor(private elementRef: ElementRef) {
this.el = this.elementRef.nativeElement;
}
@HostListener("keydown", ["$event"])
onKeyDown(e: KeyboardEvent) {
if (this.el.value == undefined) {
this.el.value = '';
}
let transformedInput = this.el.value.replace(/[^0-9]/g, '');
if (transformedInput != this.el.value) {
this.el.value = transformedInput;
}
}
@HostListener("keyup", ["$event"])
onKeyUp(e: KeyboardEvent) {
if (this.el.value == undefined) {
this.el.value = '';
e.preventDefault();
}
let transformedInput = this.el.value.replace(/[^0-9]/g, '');
if (transformedInput != this.el.value) {
this.el.value = transformedInput;
}
return transformedInput;
}
@HostListener("blur", ["$event.target.value"])
onBlur(value) {
if (this.el.value == undefined) {
this.el.value = '';
}
let transformedInput = this.el.value.replace(/[^0-9]/g, '');
if (transformedInput != this.el.value) {
this.el.value = transformedInput;
}
}
}
這工作得很好,但用戶能夠在文本框中輸入值,然后我的指令刪除非數字值,但我想阻止用戶進入文本框,我該如何實現?
我也想用鼠標覆蓋復制粘貼場景。
我有下面的 Plunker,它在 AngularJS (1.x) 中工作得很好,我如何轉換為 Angular? 我無法使用解析器。
http://jsfiddle.net/thomporter/DwKZh/
我也試過這個:
試試這個指令。 偵聽輸入事件以處理復制和粘貼。
export class NumberOnlyDirective {
constructor(private el: NgControl) {}
@HostListener('input', ['$event.target.value'])
onInput(value: string) {
// NOTE: use NgControl patchValue to prevent the issue on validation
this.el.control.patchValue(value.replace(/[^0-9]/g, ''));
}
}
您可以使用Ng Knife實用程序
導入 NgKnifeModule
... import { NgKnifeModule } from 'ng-knife'; ... @NgModule({ declarations: [ AppComponent ], imports: [ BrowserModule, NgKnifeModule ], ... }); export class AppModule { }
使用它:
<!-- Only Numbers --> <input knifeOnlyNumbers type="text">
你的指令代碼應該有這個
@HostListener("keypress",['$event']) onKeyPress(e){
var char=e.char;
var regExp = new RegExp(/[0-9.]/);
if (regExp.test(char))
return true
else
return false;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.