Ola!
Ao analisar o código, parece que a lógica de validação do CPF está correta. No entanto, o problema pode estar relacionado à maneira como você está tratando a validação no evento blur
do campo de CPF.
No seu código atual, você chama a função ehUmCPF
no evento blur
do campo de CPF sempre que ele tiver 11 caracteres. No entanto, a função ehUmCPF
não retorna um valor verdadeiro ou falso para indicar se o CPF é válido. Em vez disso, ela configura a mensagem de erro personalizada usando campo.setCustomValidity('Esse cpf não é válido')
.
Para corrigir o problema, você pode modificar a função ehUmCPF
para retornar true
se o CPF for inválido e false
se for válido. Em seguida, no evento blur
, você pode verificar o resultado da função ehUmCPF
e definir a mensagem de erro de acordo.
Aqui está uma versão modificada da função ehUmCPF
:
export default function ehUmCPF(campo) {
const cpf = campo.value.replace(/\.|-/g, "");
if (validaNumerosRepetidos(cpf) || validaPrimeiroDigito(cpf) || validaSegundoDigito(cpf)) {
return true; // CPF inválido
} else {
return false; // CPF válido
}
}
E no evento blur
, você pode atualizar a função verificaCampo
para verificar o resultado da função ehUmCPF
e definir a mensagem de erro adequadamente:
function verificaCampo(campo) {
let mensagem = "";
campo.setCustomValidity('');
if (campo.name == "cpf" && campo.value.length >= 11) {
const cpfValido = ehUmCPF(campo);
if (cpfValido) {
mensagem = mensagens[campo.name].customError;
campo.setCustomValidity(mensagem);
}
}
// Resto do código...
}
Dessa forma, a mensagem de erro será definida corretamente quando o CPF for inválido. Certifique-se de que o arquivo "valida-cpf.js" esteja sendo importado corretamente para o arquivo onde você está usando esse código.