【问题标题】:How to validate field only if filled仅在填写后如何验证字段
【发布时间】:2021-07-20 03:39:48
【问题描述】:

我正在构建这个表单,它有一个不需要的字段,但是,如果用户输入他们的电话号码,我想对其进行验证并使其成为必填项。如果没有任何内容,则应删除所需的验证。

我有这个,但它不起作用。

private checkNum( ctrl: FormControl ) {
    let valid = false;

    if ( ctrl ) {
        ctrl.setValidators(Validators.required);

        if ( ctrl.value.length ) {
            const phoneNumber = this.phoneNumberUtil.parseAndKeepRawInput( ctrl?.value, 'us' );
            valid = this.phoneNumberUtil.isValidNumber(phoneNumber);
            if (validNumber) {
                this.validPhoneNum = this.phoneNumberUtil.format(phoneNumber, PhoneNumberFormat.E164);
                return null
            }
            return { required: 'Phone Invalid' }
        } 
        return { required: 'Phone Invalid' }
    } else {
        return ctrl.clearValidators();
    }
}

【问题讨论】:

  • 动态所需的验证没有任何意义,删除它。 如果存在值,其余的自定义验证应该失败或通过。否则不执行,返回null;

标签: angular


【解决方案1】:

因此,为了更改控件的验证器,您需要执行以下操作:

// In your case: 

checkNum(ctrl: FormControl) {
   if (ctrl && ctrl.value) {
      ctrl.setValidators(Validators.required);
      ctrl.updateValueAndValidity(); // This line is important

       // Here you can do your functionality to match a regex and validate it   
   } else {
      ctrl.setValidators(null);
      ctrl.updateValueAndValidity(); // this line is important
   }

}

【讨论】:

  • 谢谢你!我必须在updateValueAndValidity({onlySelf: true}) 上做一点小改动
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-27
  • 1970-01-01
  • 2021-04-13
  • 1970-01-01
相关资源
最近更新 更多