У меня есть два пользовательских validator
в reactive form
, я вызываю функцию ниже, чтобы создать форму в конструкторе компонентов:
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()
which принимает несколько валидаторов для одного поля. - person Niladri   schedule 09.09.2017