forms - 输入类型编号 "only numeric value"验证

标签 forms angular validation

如何仅使用响应式表单(无指令)来验证 type="number" 的输入仅在值为数字或 null 时才有效?< br/> 只有数字 [0-9] 和 .是允许的,没有“e”或任何其他字符。


到目前为止我尝试了什么:

模板:

<form [formGroup]="form" novalidate>
    <input type="number" formControlName="number" id="number">
</form>

组件:

export class App {
  form: FormGroup = new FormGroup({});

  constructor(
    private fb: FormBuilder,
  ) {
    this.form = fb.group({
      number: ['', [CustomValidator.numeric]]
    })
  }
}

自定义验证器:

export class CustomValidator{
  // Number only validation
  static numeric(control: AbstractControl) {
    let val = control.value;

    if (val === null || val === '') return null;

    if (!val.toString().match(/^[0-9]+(\.?[0-9]+)?$/)) return { 'invalidNumber': true };

    return null;
  }
}

Plunker

问题是当用户输入的内容不是数字(“123e”或“abc”)时,FormControl 的值变为null,记住我不'希望该字段是必需的,因此如果该字段确实为空 null 值应该有效。

Cross browser support is also important (Chrome's number input fields do not allow the user to input letters - except "e", but FireFox and Safari do).

最佳答案

在 HTML 文件中,您可以像这样为您的模式添加 ngIf,

<div class="form-control-feedback" *ngIf="Mobile.errors && (Mobile.dirty || Mobile.touched)">
        <p *ngIf="Mobile.errors.pattern" class="text-danger">Number Only</p>
      </div>

.ts 文件中,您可以添加验证器模式 -"^[0-9]*$"

this.Mobile = new FormControl('', [
  Validators.required,
  Validators.pattern("^[0-9]*$"),
  Validators.minLength(8),
]);

关于forms - 输入类型编号 "only numeric value"验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45057907/

相关文章:

javascript - 按键延迟,如何限制只执行一次函数调用?

c# - HttpPostedFile 返回空值?

PHP 表单输入过滤

javascript - 验证复制|克隆的输入字段是否具有相同的信息

javascript - 选中/取消选中复选框时显示/隐藏表单字段

javascript - Angular 2 使用组件属性动态设置 routerLink

javascript - 从 googlebot 的 Angular 来看,universal.angular.io 与 prerender.io

angular - 如何使用 ngx-bootstrap 模式获取响应 'yes' 或 'no'

javascript - MVC3 不显眼的验证 : how to remove/re-attach validation from a group of elements?

jquery - 如何检查一组具有不同名称值的复选框中是否至少选中了一个复选框