municipioIncluirForm = this.fb.group({
estado: ['', [Validators.required]],
cep: ['', [
Validators.required,
Validators.min(10),
Validators.max(10)
]],
nome: ['', [
Validators.required,
Validators.max(30)
]],
pontoBusca: ['', [Validators.required]],
});
Como fazer para que o Validators.max(10), do CEP, funcione. Como estou usando mascara do plugin angular2-text-mask, ele conta 30.860-__, como 10. O que está certo.
Mas como faço para não contar a mascara ?
Você pode criar um validador: https://angular.io/guide/form-validation#defining-custom-validators, Com isso vc obtém o valor do cep, pega somente os números (com regex) e faz a verificação.
Nunca fiz um validador customizado, mas pelo que li na documentação e o que vc precisa, imagino algo mais ou menos assim:
export function requiredCepWithMaskValidator(): ValidatorFn {
return (control: AbstractControl): {[key: string]: any} | null => {
const textNumbers = control.value.match(/\d+/g).join('');
const isValid = cepTextNumbers.length === 8;
return isValid ? null : { 'required': { value: control.value }};
};
}
E no seu formGroup:
cep: ['', [
Validators.required,
Validators.min(10),
Validators.max(10),
requiredCepWithMaskValidator() // <-- aqui vc invoca o validador customizado
]],
Ops, erro de digitação:
const cepTextNumbers = control.value.match(/\d+/g).join('');