我正在使用其他question的正则表达式,但在我的问题上发现了点号。
我想允许用户输入最多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
因此,如果在点用户之后可以有任意数字,那么他可以按需要多次击退空格,但是输入内容没有任何变化。
我可以在此指令中这样做吗?
答案 0 :(得分:0)
更改正则表达式:
private regex: RegExp = new RegExp(/(^[0-9]{1,3})+([,.]{1}[0-9]{1,4}){0,1}$/g);