Expressão Regular para Nome Completo


Estou tentando criar um regex para validar uma entrada do usuário. Só gostaria de validar um nome completo. Pelos regex que eu tentei, não é possível validar nomes com acento (Luís Alberto), apóstrofo (Brian O’Connor) ou hífen (Catherine Zeta-Jones)…


Alguém pode compartilhar alguma ideia?


4 comentários

Reputação 7
Crachá +2

cara eu não pensei em nada agora mas amei os exemplos

Eu não conheço nada para validar nome completo, infelizmente.


Se ajudar:



  • segue uma API que checa o primeiro nome (acredito que não seja exatamente o que você procura).

  • Outra ideia para validar o nome completo você poderia tentar validar com uma api que tenha a base de contatos da empresa (ainda sim estaria correndo riscos de erros de digitação)

  • ou pedir o CPF que acredito que seja mais fácil pq poderia usar outras APIs para checar se a pessoa é quem diz ser, caso seja essa a intenção.


Vou colocar a expressão regex e explicá-la. Aí tu tem que criar um script recebendo a variável de entrada.


Se o nome for simples, ou seja, não tem nome e nem sobrenome.


var nome = "colocar o nome da variável";
var regex = /^[A-Za-záàâãéèêíïóôõöúçñÁÀÂÃÉÈÍÏÓÔÕÖÚÇÑ-']+$/;

A-Za-z maiúsculas e minúsculas sem acento

áàâãéèêíïóôõöúçñ : vogais acentuadas do português, cedilha e umas outras de lambuja, minúsculas

ÁÀÂÃÉÈÊÍÏÓÔÕÖÚÇÑ : vogais acentuadas do português, cedilha e umas outras de lambuja, maiúsculas

- hífen

' apóstrofo


Se for nome e sobrenome.

Neste caso, talvez fosse melhor fazer o split da string, separando-a por espaços, e em seguida verificar se cada uma das partes é um nome válido (ou seja, se tem somente letras):



var nomeCadastro = "colocar o nome da variável";

// removi o espaço da regex (agora ela só considera as letras)
var regex = /^[A-Za-záàâãéèêíïóôõöúçñÁÀÂÃÉÈÍÏÓÔÕÖÚÇÑ-']+$/;

nomeCadastro.forEach(nome => {
let valido = nome.split(/ +/).every(parte => regex.test(parte));
console.log(`${nome} = ${valido ? 'válido': 'inválido'}`);
});
Reputação 6
Crachá

Olá,


Validação de nomes realmente é um problema bem complicado. A solução vai depender da sua aplicação. A solução apresentada pelo @costa verifica se o nome existe na base de dados do IBGE ou do governo dos EUA, mas pode falhar para nomes de outras nacionalidades. Já a solução de regex apresentada pela @Localiza_Imoveis é mais simples, porém aceita qualquer palavra, inclusive “melancia” e “beija-flor”. O grande problema da validação de nomes é saber diferenciar se o nome é algo válido ou uma palavra qualquer. E sempre tem várias exceções que dificultam essa validação (vide o nome do filho do Elon Musk que tem até número no meio).


Se possível, tente verificar se o nome está correto de mais de uma maneira. Caso o usuário tenha cadastro em seu sistema, você poderia pedir algum outro dado dele como CPF e verificar se bate com os dados cadastrados. Caso o seu bot tenha atendimento humano, o atendente poderia corrigir um possível nome errado também durante o atendimento.


Mas como eu disse, tudo vai depender da sua aplicação. Caso o seu bot use o nome do usuário apenas para melhorar a experiência da conversa ou algo simples e que não tem tanto problema ter erro (como aceitar melancia como nome ou não reconhecer nomes de várias nacionalidades) você pode utilizar essas opções que forem citadas. Porém, caso você precise de uma validação mais rigorosa do nome, você pode utilizar o plugin da Blip store que faz essa verificação.


image

Comente