防止用户输入角度反应形式的字母

防止用户输入角度反应形式的字母

问题描述:

我正在构建一个角度4反应形式。到目前为止,我有去年4 SSN以下验证规则:防止用户输入角度反应形式的字母

last4Ssn: ['', [Validators.required, Validators.minLength(4), Validators.maxLength(4), Validators.pattern('^[0-9]+$')]], 

模板:

<label>Last 4 SSN 
    <input formControlName="last4Ssn" > 
    {{ shortForm.get('last4Ssn').errors | json }} 
    <div 
    class="error" 
    *ngIf="shortForm.get('last4Ssn').hasError('required') && shortForm.get('last4Ssn').touched"> 
    Name is required 
    </div> 
    <div 
    class="error" 
    *ngIf="shortForm.get('last4Ssn').hasError('minlength') && shortForm.get('last4Ssn').touched"> 
    Minimum of 4 characters 
    </div> 
</label> 

这正确调用了错误。例如,如果我输入“dn4”,则可以打印出以下内容:

{ "minlength": { "requiredLength": 4, "actualLength": 3 }, 
    "pattern": { "requiredPattern": "^^[0-9]+$$", "actualValue": "dn#" } } 

我该如何防止用户输入字母或特殊字符?那是否超出了angular的内置功能,我需要构建一些自定义的东西?

我发现了一个简单的函数,可以阻止用户输入除数字之外的任何内容。我将其与keypress事件绑定在一起,其余事件均由其处理。

onlyNumberKey(event){ 
     let charCode = (event.query) ? event.query : event.keyCode; 
     console.log(charCode); 
      if (charCode > 31 
       && (charCode < 48 || charCode > 57)) 
       return false; 

      return true; 
    } 

HTML:

<md-input-container> 
    <input mdInput placeholder="Last 4 SSN" (keypress)="onlyNumberKey($event)"> 
</md-input-container> 

Plnkr demo

+1

建立你的答案并通过正则表达式运行keyCode。 – Anthony

获取键码,转换为字符串,通过正则表达式运行。

numbersOnlyValidation(event){  
const inp = String.fromCharCode(event.keyCode);  
/*Allow only numbers*/ 
    if (!/^\d+$/.test(inp)){ 
    event.preventDefault() 
    }  
}