【发布时间】:2019-09-11 06:16:26
【问题描述】:
我有一个指令,即限制文本输入在文本输入中只写入十进制数
这是指令代码
import { HostListener, Directive, ElementRef } from '@angular/core';
@Directive({
exportAs: 'decimal-number-directive',
selector: 'decimal-number-directive, [decimal-number-directive]',
})
export class DecimalNumberDirective {
private regex: RegExp = new RegExp(/^\d*\.?\d{0,2}$/g);
private specialKeys: string[] = ['Backspace', 'Tab', 'End', 'Home'];
constructor(private el: ElementRef) {}
@HostListener('keydown', ['$event'])
onKeyDown(event: KeyboardEvent): void {
if (this.specialKeys.indexOf(event.key) !== -1) {
return;
}
const current: string = this.el.nativeElement.value;
const next: string = current.concat(event.key);
if (next && !String(next).match(this.regex)) {
event.preventDefault();
}
}
}
这是我使用它的输入
<div class="col-2 pr-0">
<label>{{ l('Percent') }}</label>
<input
class="form-control"
type="text"
decimal-number-directive
name="percent"
[(ngModel)]="inquiryItemToAdd.percent"
maxlength="64"
(ngModelChange)="setTotalPrice()"
[readOnly]="!inquiryItemToAdd.servicePriceId || !servicePrice.isPriceCalculated"
/>
</div>
但我可以写例如 155.00 或 155.56。我需要用 100.00 来限制它,因为我用它来写百分比。
我尝试使用这个正则表达式private regex: RegExp = new RegExp(/^(\d{1,2}(\.\d{1,2})?)|(100(\.0{1,2})?)$/g);,但我仍然可以使用 150%。
我该如何解决这个问题?
【问题讨论】:
-
你有必要使用正则表达式吗?
-
是的,有必要@AbuTaha
标签: javascript regex angular typescript