我想创建一个自定义的通用验证器,该验证器将通过参数传递正则表达式的模式和要检查的(表单组的)属性名称。我有以下代码

UserName: new FormControl('',
      [
        Validators.required,
        Validators.minLength(8),
        this.OnlyNumbersAndLetterValidator(/^[a-zA-Z0-9]+$/, "UserName")
      ]
    )

OnlyNumbersAndLetterValidator(regexPattern: RegExp, propertyName: string): ValidatorFn {
        return (currentControl: AbstractControl): { [key: string]: any } => {
          if (!regexPattern.test(currentControl.value)) {
            return { propertyName: true }
          }
        }
      }

问题是,当表达式无效时,返回“{propertyName:true}” 而不是“{UserName:true}” ,这是什么问题?

最佳答案

创建一个临时对象,然后返回。此处propertyName中的return { propertyName: true }是字符串,而不是输入变量。

OnlyNumbersAndLetterValidator(regexPattern: RegExp, propertyName: string): ValidatorFn {
        return (currentControl: AbstractControl): { [key: string]: any } => {
          if (!regexPattern.test(currentControl.value)) {
           let temp = {};
           temp[propertyName] = true;
            return temp;
          }
        }
      }

关于angular - 自定义验证器Fn- Angular 6,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50669872/

10-12 15:32