Angular formGroup,每个值都有特定的验证器

问题描述

我有一个3值的表格。

 this.testForm = this.formBuilder.group(
      {
        beginDate: ['',[Validators.required]],endDate: ['',username: ['',},{ }
    );

我想为每个值放置一个特定的验证器,所以 beginDate应该为01.xx.xxxx(应始终为该月的第一天) endDate应该为25.xx.xxxx(应始终为当月的25) 用户名应以“ p”字母开头。

有什么更好的方法? 我可以创建一个验证器并使用if / else进行检查,但这不是很漂亮:

this.testForm = this.formBuilder.group(
      {
        beginDate: ['',{ validator: this.checkValue}
    );

为fromgroup的每个值都配备一个验证器是更好的方法吗?

解决方法

您可以尝试如下所示的自定义验证器。


function dayOfMonthValidator(date: number): ValidatorFn {
  return (control: AbstractControl): {
    [key: string]: boolean
  } | null => {
    let {  value } = control;
    if (Object.prototype.toString.call(control.value) !== "[object Date]")
      value = Date.parse(value);
    return value.getDate() === date 
      ? null 
      : { "dayOfMonth": true   }
  };
}

并按如下所示使用它:

this.testForm = this.formBuilder.group(
      {
        beginDate: ['',[Validators.required,this.dayOfMonthValidator(1)]],endDate: ['',this.dayOfMonthValidator(25)]],username: ['',[Validators.required]],},);

Stackblitz