数字和小数值的 Angular 2 自定义验证

新手上路,请多包涵

我有一个自定义验证器,用于检查输入字段中是否输入了数字。 在此处输入图像描述

代码如下所示:

 import { AbstractControl, ValidatorFn } from '@angular/forms';

export class NumberValidators {

  static isNumberCheck(): ValidatorFn {
    return  (c: AbstractControl): {[key: string]: boolean} | null => {
      if (c.value !== undefined && (isNaN(c.value))) {
        return { 'value': true };
      }

      return null;
    };
  }
}

但我遇到的问题是,当我输入一个十进制值时,它会引发我不想要的验证标志。我希望输入字段包含整数和小数。有人可以帮我解决这个问题吗?

下面是我使用 parsleyjs 进行验证的模板代码

 <div class="form-group row">
              <label for="upperbeltposition" class="col-md-6 col-form-label">Upper Belt Position (mm) <span class="required">*</span></label>
              <div class="col-md-5">
                <input class="form-control input-transparent " id="upperbeltposition" type="text" formControlName="upperbeltposition"  data-parsley-trigger="blur"
                  required="required" data-parsley-type="number"/>
              </div>
            </div>
             <div class="form-group row">
              <label for="platformxposition" class="col-md-6 col-form-label">Platform X Position (mm) <span class="required">*</span></label>
              <div class="col-md-5">
                <input class="form-control input-transparent " id="platformxposition" type="text" formControlName="platformxposition"  data-parsley-trigger="blur"
                  required="required" data-parsley-type="number"/>
              </div>
            </div>
             <div class="form-group row">
              <label for="platformyposition" class="col-md-6 col-form-label">Platform Y Position (mm) <span class="required">*</span></label>
              <div class="col-md-5">
                <input class="form-control input-transparent " id="platformyposition" type="text" formControlName="platformyposition"  data-parsley-trigger="blur"
                  required="required" data-parsley-type="number"/>
              </div>
            </div>

在我的组件中,我使用的是响应式表单,下面是我的代码

 upperbeltposition: ['', [Validators.required, NumberValidators.isNumberCheck]],
platformxposition: ['', [Validators.required, NumberValidators.isNumberCheck]],
platformyposition: ['', [Validators.required, NumberValidators.isNumberCheck]]

谢谢!!

原文由 ZAJ 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 379
2 个回答

这样的事情应该工作

import { AbstractControl, ValidatorFn } from '@angular/forms';

export class NumberValidators {

  static isNumberCheck(): ValidatorFn {
    return  (c: AbstractControl): {[key: string]: boolean} | null => {
      let number = /^[.\d]+$/.test(c.value) ? +c.value : NaN;
      if (number !== number) {
        return { 'value': true };
      }

      return null;
    };
  }
}

原文由 Trash Can 发布,翻译遵循 CC BY-SA 3.0 许可协议

可以使用 ng-pattern 验证

  ng-pattern="^[0-9]+(.[0-9]{0,2})?$"

你能像这样检查一次吗

  <label for="upperbeltposition"
   class="col-md-6 col-form-label"
   name="number">
     Upper Belt
     Position (mm)
      <span class="required">*</span>
  </label>
   <div class="col-md-5">
   <input
    class="form-control input-transparent "
    id="upperbeltposition"
    type="text"
    formControlName="upperbeltposition"
     data-parsley-trigger="blur"
    required="required"
    data-parsley-type="number"/>
    <span
     ng-show="submitForm && platformxposition
      .number.$error.pattern">This value should be a valid number
   </span>

  </div>

您必须添加表单名称。并输入字段名称。$error.pattern

原文由 Kondal 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏