Angular 6限制某些字母表

问题描述 投票:0回答:2

我有以下输入字段。我试图只允许用户从A-F输入字母。如果用户试图输入该范围之外的字母表,则应该即时修剪字母表,即没有按钮来验证其是否有效输入。输入字段还允许数字和特殊字符。

<mat-form-field>
  <input matInput (keyup)="MACAddressInput()" placeholder="MAC address" name="mac_address" required [(ngModel)]="model.mac_address" (blur)="validate()">
  <mat-error *ngFor="let error of errors_by_field['mac_address']">{{error.message}}</mat-error>
</mat-form-field>

  MACAddressInput() {
    if (this.model.mac_address) {
      const inputColon = this.model.mac_address.replace(new RegExp(':', 'g'), '').trim();
      const MAC_blocks = inputColon.match(/.{1,2}/g);
      let formatedMac = MAC_blocks.shift();
      for (const block of MAC_blocks) {
       formatedMac = formatedMac + ':' + block;
      }
      this.model.mac_address = formatedMac.toUpperCase();
    }
  }

我尝试使用html模式,但它允许用户输入任何内容

angular typescript angular-material
2个回答
2
投票

你可以创建一个custom pipe来做到这一点。

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
    name: 'myCustomPipe'
  })
  export class MyCustomPipe implements PipeTransform {
    transform(input: string): string {
        let newString = "";
      for(let i=0; i<= input.length; i++){
        var char = input.charAt(i);
        if(char.charCodeAt(0) >= 65 && char.charCodeAt(0) <=70){
            newString += char;
        }
      }

      return newString;
    }
  }

然后将其添加到您的模块中

 declarations: [
    ...
    MyCustomPipe,
    ...
]

以这种方式将其调用到您的.html组件中

{{ myText | myCustomPipe }}

我做了一个测试,用myText = "ABCG";我的管道将文本修剪为ABC

在你的功能中做出神奇的事:

if (this.model.mac_address) {
    let newString = "";
    for(let i=0; i<= this.model.mac_address.length; i++){
        var char = this.model.mac_address.charAt(i);
        if(char.charCodeAt(0) >= 65 && char.charCodeAt(0) <=70){
            newString += char;
        }
    }
    this.model.mac_address = newString.toUpperCase();
}

2
投票

如果你想用简单的绑定功能来做这件事

码:

MACAddressInput(e) {
   let code = e.key.charCodeAt(0);
   if ((code >= 65 && code <= 90) || (code >= 97 && code <= 122)) {}
   else {
     e.preventDefault();
     return;
   }
}

HTML:

<input matInput (keydown)="MACAddressInput($event)" placeholder="MAC address" name="mac_address" required [(ngModel)]="model.mac_address" (blur)="validate()">

注意:确保使用(keydown)事件。此代码将允许A-Z和a-z。

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