【发布时间】:2019-05-23 09:28:41
【问题描述】:
我正在使用来自其他 question 的正则表达式,但在我的情况下,我发现 dot 存在问题。
我想允许用户放置最多 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
因此,如果点后有任何数字,用户可以根据需要多次按退格键,但输入中没有任何变化。
我可以在这个指令这里做吗?
【问题讨论】:
标签: javascript regex angular