Angular 2限制输入字段

问题描述 投票:-1回答:2

我想知道是否可以将输入字段限制为某种格式,例如你想要的那么多位数“。”然后2位数?这基本上是价格的输入......而且我不想像模式属性那样进行简单的验证。我希望用户无法进行错误输入。

angular input restriction
2个回答
2
投票

你需要使用一个指令。在指令中添加一个关于输入的hotListener,并检查是否与指示的regExpr匹配。我不久前制作了一个指令面具。 the stackblitz中的指令,其代码是“按原样”提供,没有任何形式的担保。

@Directive({
  selector: '[mask]'
})
export class MaskDirective {
  @Input()
  set mask(value) {
    this.regExpr = new RegExp(value);
  }

  private _oldvalue: string = "";
  private regExpr: any;
  private control: NgControl;
  constructor(injector: Injector) {
    //this make sure that not error if not applied to a NgControl
    try {
      this.control = injector.get(NgControl)
    }
    catch (e) {
    }
  }
  @HostListener('input', ['$event'])
  change($event) {

    let item = $event.target
    let value = item.value;
    let pos = item.selectionStart; //get the position of the cursor
    let matchvalue = value;
    let noMatch: boolean = (value && !(this.regExpr.test(matchvalue)));
    if (noMatch) {
      item.selectionStart = item.selectionEnd = pos - 1;
      if (item.value.length < this._oldvalue.length && pos == 0)
        pos = 2;
      if (this.control)
        this.control.control.setValue(this._oldvalue, { emit: false });

      item.value = this._oldvalue;
      item.selectionStart = item.selectionEnd = pos - 1; //recover the position
    }
    else
      this._oldvalue = value;
  }
}

当你在字符串(或html)中写“mask”时要小心。例如对于带有两位小数的数字是:

[mask]="'^[+-]?([1-9]\\d*|0)?(\\.\\d\{0,2\})?$'"

(\必须写成\\,{as \ {,} as \} ...)


1
投票

您可以使用HTML5功能,正则表达式输入

使用正则表达式模式验证:

<input type="text" name="weight" value="" pattern="^[1-9]\d{0,*}\.\d{2}$" />

你也可以使用这个库,用密钥装饰你的输入:

<input type="text" pattern="[0-9]+" ng-pattern-restrict /> 

回购:github.com/AlphaGit/ng-pattern-restrict

© www.soinside.com 2019 - 2024. All rights reserved.