Я создал новый файл customPhoneValidator.ts
, содержащий следующее:
import { AbstractControl, ValidatorFn } from '@angular/forms';
import { isValidNumber, NationalNumber, CountryCode } from 'libphonenumber-js';
export const customPhoneValidator = (countries: CountryCode[]): ValidatorFn => {
return (control: AbstractControl): { [key: string]: boolean } => {
let v: NationalNumber = control.value;
if (!v || v === '') return null;
const validPhone: boolean = countries.map(c => isValidNumber(v, c)).some(z => z);
return validPhone ? null : { phone: true };
};
};
В компоненте, который использует валидатор, я объявил const customPhoneCountries: CountryCode[] = ['US', 'CA'];
и передал customPhoneValidator(customPhoneCountries)
в качестве валидатора для элемента управления формы.