#angular #angular-directive #angular-forms #angular-validation
#угловой #угловая директива #угловые формы #угловая проверка
Вопрос:
Я хочу, чтобы ввод принимал только десятичное число, но когда я переключаю клавиатуру на другие языки (например , китайский..) и набираю текстовый символ, все возвращается в нормальное состояние, как это предотвратить?, спасибо
@Directive({ selector: '[numeric]' }) export class NumericDirective { @Input('decimals') decimals: number = 0; private check(value: string, decimals: number) { if (decimals lt;= 0) { return String(value).match(new RegExp(/^d $/)); } else { var regExpString = "^\s*((\d (\.\d{0," decimals "})?)|((\d*(\.\d{1," decimals "}))))\s*$" return String(value).match(new RegExp(regExpString)); } } private specialKeys = [ 'Backspace', 'Tab', 'End', 'Home', 'ArrowLeft', 'ArrowRight', 'Delete' ]; constructor(private el: ElementRef) { } @HostListener('keydown', ['$event']) onKeyDown(event: KeyboardEvent) { if (this.specialKeys.indexOf(event.key) !== -1) { return; } // Do not use event.keycode this is deprecated. // See: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode const current: string = this.el.nativeElement.value; const position = this.el.nativeElement.selectionStart; const next: string = [current.slice(0, position), event.key === 'Decimal' ? '.' : event.key, current.slice(position)].join(''); if (next amp;amp; !this.check(next, this.decimals)) { event.preventDefault(); } } }