Skip to content

Custom Validators

When built-in validators aren’t enough, create custom sync or async validators.

function noSpacesValidator(control: AbstractControl): ValidationErrors | null {
return /\s/.test(control.value) ? { hasSpaces: true } : null;
}
function uniqueEmailValidator(service: UserService) {
return (control: AbstractControl): Observable<ValidationErrors | null> => {
return service.checkEmail(control.value).pipe(
map(taken => taken ? { emailTaken: true } : null)
);
};
}

Custom validators provide flexible, reusable validation logic.”