Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Implementação de outros Validators

Existe alguma função ou método já criado para o tratamento de validações que são necessárias por padrão nos inputs? por exemplo: eu estou tentando implementar um validator que não aceita caracteres repetidos, eu vi que o formcontrol não fornece um método para o mesmo, enquanto estou sem resposta irei procurar por alguma biblioteca ao invés de criar uma lógica diretamente no .ts

1 resposta
solução!

Oi Robert, tudo bem?

Entendo que você esteja buscando uma maneira de implementar validações personalizadas em seus campos de input no Angular. Irei te dar dicas de como você pode fazer.

O Angular fornece algumas validações prontas, como required, minlength, maxlength e pattern, mas para validações mais específicas, como a que você mencionou (não aceitar caracteres repetidos), você precisará criar um validador personalizado.

Um validador personalizado é uma função que recebe um AbstractControl e retorna um objeto de erros ou null. Aqui está um exemplo de como você poderia criar um validador para não aceitar caracteres repetidos:

import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';

export function NoRepeatedCharactersValidator(): ValidatorFn {
  return (control: AbstractControl): ValidationErrors | null => {
    const value = control.value;
    if(typeof value === 'string' && /(.).*\1/.test(value)) {
      return { 'repeatedCharacters': true };
    }
    return null;
  };
}

Nesse exemplo, a função NoRepeatedCharactersValidator retorna uma função de validação que verifica se algum caractere se repete na string. Se algum caractere se repetir, ela retorna um objeto de erro, caso contrário, retorna null.

Para usar esse validador, você pode adicioná-lo à lista de validadores do seu campo de input:

this.loginForm = this.formBuilder.group({
  email: [null, [Validators.required, Validators.email, NoRepeatedCharactersValidator()]],
  senha: [null, Validators.required]
});

E para exibir a mensagem de erro, você pode adicionar um novo <mat-error> no seu HTML:

<mat-error *ngIf="loginForm.get('email')?.errors?.['repeatedCharacters']">
  Não são permitidos caracteres repetidos
</mat-error>

Um abraço e bons estudos.