【问题标题】:postal code input with only numbers(limited 5 ) l Angular 4/5邮政编码只输入数字(限制 5 个) l Angular 4/5
【发布时间】:2018-11-22 18:12:37
【问题描述】:

我想用这些数字进行输入,但如果我将输入类型输入文本我可以输入 5 个字符的字母数字,如果我将输入类型输入数字我只能输入数字,但它不限于5个数字 谢谢大家

HTML

<input type="text" id="number" name="postalCode" placeholder="Saisissez le code postal" formControlName="postalCode" maxlength="5" class="a-textbox"  pattern="/^(([0-8][0-9])|(9[0-5]))[0-9]{3}$/" />

角度

postalCode: new FormControl('', [Validators.maxLength(5)]),

【问题讨论】:

标签: javascript html angular


【解决方案1】:

你可以试试这个解决方案

我在stackblitz创建了一个演示

html代码

<input type="text" OnlyNumber id="number" name="postalCode" placeholder="Saisissez le code postal" formControlName="postalCode" maxlength="5" class="a-textbox" />

OnlyNumber 属性指令

import { Directive, ElementRef, HostListener } from '@angular/core';

@Directive({
    selector: '[OnlyNumber]'
})
export class OnlyNumberDirective {

    constructor(private el: ElementRef) { }

    @HostListener('keydown', ['$event']) onKeyDown(event: KeyboardEvent) {
        let e = <KeyboardEvent>event;
        /* 
            8 -  for backspace
            9 -  for tab
            13 - for enter
            27 - for escape
            46 - for delete
        */
        if ([8, 9, 13, 27, 46].indexOf(e.keyCode) !== -1 ||
            // Allow: Ctrl+A
            (e.keyCode === 65 && (e.ctrlKey || e.metaKey)) ||
            // Allow: Ctrl+C
            (e.keyCode === 67 && (e.ctrlKey || e.metaKey)) ||
            // Allow: Ctrl+V
            (e.keyCode === 86 && (e.ctrlKey || e.metaKey)) ||
            // Allow: Ctrl+X
            (e.keyCode === 88 && (e.ctrlKey || e.metaKey)) ||
            // Allow: home, end, left, right
            (e.keyCode >= 35 && e.keyCode <= 39)) {
            // let it happen, don't do anything
            return;
        }
        // Ensure that it is a number and stop the keypress
        if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {
            e.preventDefault();
        }
    }

    @HostListener('paste', ['$event']) blockPaste(event: KeyboardEvent) {
        this.validateFields(event);
    }
    validateFields(event) {
        setTimeout(() => {
            let numberRegEx = /^[0-9]+$/;
            if(!numberRegEx.test(this.el.nativeElement.value)){
                this.el.nativeElement.value = "";
                event.preventDefault();
            }
        }, 100)
    }
}

【讨论】:

  • 它可以工作,但不是 100%,因为我可以输入被禁止的特殊字符......在所有键盘中我只能输入数字。! @krishna 的解决方案是什么
  • 这对我来说很好用。请为您的问题创建一个演示视频/GIF。
【解决方案2】:

这个指令对我来说效果很好,它拥有你需要的一切,只需要将其强制为 5 位数字,并排除与数字相关的字符,如句点、“e”等。 我建议也将输入保留为文本类型,请参阅此处的推理。 Digit Only Directive in Angular

Angular DigitOnly 指令和 Mask 指令 https://github.com/changhuixu/ngx-digit-only

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-16
    • 2018-12-02
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    相关资源
    最近更新 更多