我在响应式表单中有两个自定义的验证器
,在组件构造函数中调用下面的函数来创建表单:
private createForm(): void {
this.passwordUpdateForm = this.formBuilder.group({
newpassword : [null, Validators.required],
passwordconfirm: [null, Validators.required]
},
{
validator: [PasswordValidation.PasswordMatch, PasswordValidation.PasswordRule] // validation method
});
PasswordValidation是一个包含两个以下函数的类。
export class PasswordValidation {
public static PasswordMatch(control: AbstractControl) {
let password = control.get('newpassword'); // to get value in input tag
if(password){
let confirmPassword = control.get('passwordconfirm').value; // to get value in input tag
if (password.value !== confirmPassword) {
control.get('passwordconfirm').setErrors({ ['passwordmatch'] : true});
}else {
return null;
}
}
}
public static PasswordRule(control: AbstractControl) {
let password = control.get('newpassword').value; // to get value in input tag
let pattern = new RegExp('^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,64}');
if (!pattern.test(password)) {
control.get('newpassword').setErrors({ ['passwordrule'] : true});
}else if (password.toLowerCase() === 'something') {
control.get('newpassword').setErrors({ ['passwordrule'] : true});
}else {
return null;
}
}
}
每个自定义验证器单独使用都能正常工作,如下所示
validator: PasswordValidation.PasswordMatch
或者这个
validator: PasswordValidation.PasswordRule
但是在数组中同时使用它们:
validator: [PasswordValidation.PasswordMatch, PasswordValidation.PasswordRule]
我遇到了错误this.validator is not a function
,但它并不起作用,我一点头绪也没有,请帮帮我。
Validators.compose()
,它接受多个验证器来验证一个字段。 - Niladri