Validar nome de pessoa

3,691 views
Skip to first unread message

Tiago Agostinho

unread,
Dec 17, 2014, 12:14:18 PM12/17/14
to php-b...@googlegroups.com
Boa tarde a todos.

Recorro a lista, solicitando a ajuda para validar nome de pessoas.

Achei diversas soluções na internet, mas não me atendeu totalmente.

Alguém já precisou desse tipo de validação.

Tiago


Ronald Bolsoni Falcão

unread,
Dec 17, 2014, 12:16:21 PM12/17/14
to PHP Brasil
Exatamente o quê precisa validar no nome?





twitter   @ronaldcurtis

"Se você eliminar o impossível o que sobrar, mesmo que improvável, dever ser verdade.
Sir Arthur Conan Doyle

--
Você recebeu essa mensagem porque está inscrito no grupo "php-brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para php-brasil+...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para php-b...@googlegroups.com.
Acesse esse grupo em http://groups.google.com/group/php-brasil.
Para mais opções, acesse https://groups.google.com/d/optout.

Tiago Agostinho

unread,
Dec 17, 2014, 12:40:14 PM12/17/14
to php-b...@googlegroups.com
Ronald, cheguei na seguinte função:

function validaNome( $nome ){
    $nome = trim($nome);
    $regex  = "/^[A-Za-záàâãéèêíïóôõöúçñÁÀÂÃÉÈÍÏÓÔÕÖÚÇÑ ]+$/";
    if (preg_match($regex, $nome)) {
        echo "ok";
    } else {
        echo "invalido";
    }
}

- não permite números
- não permite espaços duplos

a função dá como inválido nomes que contenham apóstrofo - vocês acham que devo considerar?

Cassiano Ricardo Mourão

unread,
Dec 17, 2014, 12:51:05 PM12/17/14
to php-b...@googlegroups.com
Acho que deva. Aqui na nossa base temos alguns.
Tem outras validações também, como duas letras juntas que não seja 'de' 'da' 'do' (não lembro se tem outras possíveis).
Aqui temos uma função própria, mas não manjo dos paranauê (fica a cargo de outra área).

Tiago Agostinho

unread,
Dec 17, 2014, 12:58:13 PM12/17/14
to php-b...@googlegroups.com
beleza Cassiano.

Leandro Chaves

unread,
Dec 18, 2014, 5:07:59 AM12/18/14
to php-b...@googlegroups.com
Tiago,
Para nome próprio existem muitas possibilidades.
Basicamente, a única coisa que dá pra restringir com segurança é excesso de espaços e só.
Já tive péssimas experiências com a validação de nomes.

Um exemplo é o nome de uma colega de trabalho, o nome dela tem 5 letras e o sobrenome 2 (isso mesmo só 2 letras).
Uma porção de sistemas não aceitam o nome dela, gerando um stress desnecessário.

Tiago Agostinho

unread,
Dec 18, 2014, 6:32:49 AM12/18/14
to php-b...@googlegroups.com
Obrigado Leandro.

A função que compartilhei não permite números no campo nome.

Será que existe pessoas com número no nome???

Realmente, validar nome de pessoas é muito complicado.

Ronald Bolsoni Falcão

unread,
Dec 18, 2014, 6:53:45 AM12/18/14
to PHP Brasil
Validar nome realmente é "nabada", as únicas que já usei por conta de higienização de dados são:
- Retiradas de espaços em branco (isso pode dar problemas com relação à impressão de etiquetas, por exemplo, onde existe um limite máximo de 40, 60 caracteres);
- Retirada de caracteres especiais (exceto -)

Isso porque existem nomes do tipo:

Willian Gates III (ou 3)
Antoine de Saint-Exupéry
Björk

São raros e fora do contexto Brasil? São. Você tem que pesar se o número de ocorrências que essa limitação vai gerar é muito alta para ser tratada pelo seu operacional, ou se vale implementar para não ter dores de cabeça. Num sistema internacional eu não faria essas validações, mas tomaria cuidado no backend para evitar problemas de segurança.

Abraços.






twitter   @ronaldcurtis

"Se você eliminar o impossível o que sobrar, mesmo que improvável, dever ser verdade.
Sir Arthur Conan Doyle

Denis Casarotto

unread,
Dec 27, 2014, 8:16:58 AM12/27/14
to php-b...@googlegroups.com
Pessoal ainda não estou conseguindo.
Veja o código inteiro:

<?php
include 'connections/conexao.php';
include 'connections/functions.php';

$select = "SELECT A.ID, C.SIGLA_UF AS UF, B.DESCR_CIDADE AS CIDADE, A.TELEFONE1, A.TELEFONE2,
CASE WHEN A.TIPO_CLI = 'PF' THEN A.NOME_CONTATO ELSE A.NOME_FANTASIA END AS CLINTE,
CASE WHEN A.TIPO_CLI = 'PF' THEN A.CPF ELSE A.CNPJ END AS DOC_CLINTE, A.EMAIL
FROM TB_CLIENTE_PJ_PF A INNER JOIN TB_CIDADE B ON(A.ID_CIDADE = B.ID)
INNER JOIN TB_UF C ON(B.ID_UF = C.ID) ORDER BY A.ID DESC";
$exec = odbc_exec($con, $select) or die(odbc_errormsg());

$select2 = "PR_DADOS_DESENVOLVEDOR";
$exec2 = odbc_do($con, $select2) or die(odbc_errormsg());
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Sistema Administrativo</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="">
<link href="css/bootstrap.css" rel="stylesheet">
<link href="css/static.css" rel="stylesheet">
<!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
<!--[if lt IE 9]>
 <script src="js/html5shiv.js"></script>
<![endif]-->
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="ico/favicon144.png">
<link rel="apple-touch-icon-precomposed" sizes="114x114" href="ico/favicon114.png">
<link rel="apple-touch-icon-precomposed" sizes="72x72" href="ico/favicon72.png">
<link rel="apple-touch-icon-precomposed" href="ico/favicon57.png">
<link rel="shortcut icon" href="ico/favicon.png">
</head>
<body>
<div class="container">
<table class="table table-striped">
<tr>
<th>Cliente</th>
<th>Doc</th>
<th>E-mail</th>
<th>Telefone 1</th>
<th>Telefone 2</th>
<th>Cidade/UF</th>
</tr>
<?php while($array = odbc_fetch_array($exec)) { ?>
<tr>
<td><?php echo utf8_encode($array['CLINTE']); ?></td>
<td><?php echo arrumaDoc($array['DOC_CLINTE']); ?></td>
<td><?php echo $array['EMAIL']; ?></td>
<td><?php echo arrumaTelefone($array['TELEFONE1']); ?></td>
<td><?php echo arrumaTelefone($array['TELEFONE2']); ?></td>
<td><?php echo utf8_encode($array['CIDADE']); ?>/<?php echo $array['UF']; ?></td>
</tr>
<?php } ?>
</table>
<div class="clearFull"><!--  --></div>
<table class="table table-striped">
<tr>
<th>Nome</th>
<th>E-mail</th>
<th>Celular</th>
</tr>
<?php while($array2 = odbc_fetch_array($exec2)) { ?>
<tr>
<td><?php echo utf8_encode($array2['NOME']); ?></td>
<td><?php echo $array2['EMAIL']; ?></td>
<td><?php echo arrumaTelefone($array2['CELULAR']); ?></td>
</tr>
<?php } ?>
</table>
</div>
<script src="js/jquery.js"></script>
<script src="js/main.js"></script>
<script src="js/bootstrap.js"></script>
</body>
</html>

Atenciosamente,

Denis Casarotto
Cel.: 11 9-71397508
denisca...@gmail.com

Yo soy la vid, vosotros los pampanos; el que permanece en mi y yo en él, este lleva mucho fruto; porque separados de mi , nada podeis hacer (Juan 15.5)
----------
Esta mensagem pode conter informações confidenciais e/ou privilegiadas.
Se você não for o seu destinatário, favor comunicar imediatamente ao remetente e destruir todas as informações e suas copias.
 
This message may contain information which is confidential and/or privileged.
If you are not the intended recipient, please advise the sender immediately and destroy it and all copies.

Este mensaje puede contener informaciones confidenciales y/o privilegiadas.
Si usted no fuere su destinatario, favor comunicar inmediatamente al remitente y destruir todas las informaciones y suyas copias.

Denis Casarotto

unread,
Dec 30, 2014, 7:00:38 AM12/30/14
to php-b...@googlegroups.com
Vi agora... mandei no lugar errado... desculpem

Iremar Afonso

unread,
Jan 15, 2015, 4:21:09 PM1/15/15
to php-b...@googlegroups.com
Ola,

Sei que o post encerrou a quase um mês,
mas lembrei dele:
Fiz o cadastro de um cliente com o nome
Van-Der Val 2 ( ou II) no passaporte esta 2

Isso quebra varias teorias de validação.



 *´¨)
 ¸.•´¸.•*´¨) ¸.•*¨)
 (¸.•´ (¸.•` *Iremar Afonso
               http://www.iremar.com.br/
               
*** Se encaminhar esta mensagem, por favor:
*** 1º. Apague o meu e-mail e o meu nome.
*** 2º. Apague também os endereços dos amigos antes de reenviar.
*** 3º. Encaminhe como cópia oculta (Cco ou Bcc) aos SEUS destinatários.
*** Obs: Agindo sempre assim dificultaremos a disseminação de vírus, cavalo de troia (trojans) e spams.

Hospedagem profissional de site com 5% de desconto por 1 ano.
http://www.kinghost.com.br/promo/XNBPMTBYM5.html

Alessandro Santos

unread,
Jan 27, 2015, 4:36:52 PM1/27/15
to php-b...@googlegroups.com
Bom dia,

Aproveitando (que só li agora a thread).

Já vi um cara com o sobrenome Sant'Anna.

Abraços.
# Alessandro Ramos dos Santos
# http://about.me/edenfall

"Tentamos muito não ficar confiantes demais, porque quando você fica confiante demais é quando alguma coisa acontece e te morde" [Neil Armstrong]

Rafael Kassner

unread,
Jan 27, 2015, 4:59:14 PM1/27/15
to php-b...@googlegroups.com

Hudson Martins

unread,
Jan 28, 2015, 1:34:42 PM1/28/15
to php-b...@googlegroups.com
Fiz uma validação de nomes esses dias aqui no trabalho.. segue a expressão regular do que não deve ser utilizado nos nomes... 

(?:[0-9|\"!@#$%¨&*()_\\-+=§{}\\[\\]ªº°;:\\/?\\.,<>\\\\\\|\\^~´`¹²³£¢¬×®¯±µ¶·»¼½¾¿ßÞØÆ©¦¥¤£¢¡«þøð])

Neste caso, a regra é não aceitar números e caracteres especiais. Tentei abranger o máximo de caracteres especiais que não devem ser aceitos...
Me atentei à aqueles casos de nomes que contém acentuação e não são comuns por aqui(Alemães, noruegueses por exemplo), mais que porventura possam aparecer por aqui já que vivemos num mundo globalizado!
Com essa expressão, não tive problemas com, por exemplo, 'ö', mas o '¨' não deve ser aceito aceito.

Espero ter ajudado!

Hudson Martins
PHP Developer
IT Specialist at IBM

Mediação Core

Jean Rafael Tardem Delefrati

unread,
Jan 28, 2015, 4:49:05 PM1/28/15
to php-b...@googlegroups.com
Cara, 0 a 9 pode acontecer em nomes, quando a pessoa tem um 3º, por exemplo (fora o º). 

ß também é uma letra válida (em alemão), que tem um som de ss ou zs. 

A letra Ø é muito usada na Dinamarca e na Groenlândia e soa como o "ö" alemão (quase um u).

A letra Þ ainda existe na Islândia.

As letras Æ, ð e µ também ocorrem em alguns alfabetos que não brasileiros. 

Todas estas letras podem ser substituídas por algo de pronúncia semelhante, mas se você precisa do nome da pessoa exatamente como está no documento dela, sua validação fica furada.

Além disso, precisa tratar também os espaços múltiplos.

Eu, pessoalmente, prefiro não tratar nomes.

Maykonn Welington Candido

unread,
Jan 29, 2015, 7:39:49 AM1/29/15
to php-b...@googlegroups.com
Bom dia,

Avalie sua regra de negócio para nomes. Feito isso você filtrar dessa forma:

$string = "Nome Bizarro";
$string = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $string);

Isso casa qualquer caractere especial da tabela ASCII no range de 0-31, 128-255 e os remove.

Caso sua regra seja outra e precise manter Ç ou qualquer outro caractere que seja válido em outro idioma, análise a tabela ASCII e reescreva seu algoritmo filtrando o que é indesejado:


E por favor, UTF-8.

É uma boa questão para usar em avaliações quando for contratar programador.

Atenciosamente,

Maykonn Welington Candido

Reply all
Reply to author
Forward
0 new messages