Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Expressão regular para nome e sobrenome
^[A-ZÉÚÍÓÁÈÙÌÒÀÕÃÑÊÛÎÔÂËYÜÏÖÄ]{1}[a-zéúíóáèùìòàõãñêûîôâëyüïöä]+$
Neste caso é obrigado digitar a primeira letra em maiusculo e o resto em minuscula, porem com faço para que seja obrigado digitar um espaço e o sobrenome ?
era isso que queria valeu
É mesmo NECESSÁRIO obrigar que a primeira letra seja maiúscula? :mellow:
Bom.. respondendo à pergunta, seria algo assim:
^[A-ZÉÚÍÓÁÈÙÌÒÀÕÃÑÊÛÎÔÂËYÜÏÖÄ][a-zéúíóáèùìòàõãñêûîôâëyüïöä]+( [A-ZÉÚÍÓÁÈÙÌÒÀÕÃÑÊÛÎÔÂËYÜÏÖÄ][a-zéúíóáèùìòàõãñêûîôâëyüïöä]+)+$
1 - Retirei o {1}, pois é o mesmo que nada. É redundante, e atrapalha a leitura à toa.
2 - Deverá haver no mínimo um sobrenome. Exemplos de strings que devem casar (não testei a regex):
Gilbertão Silva
Senor Abravanel
Um Nome Muito Comprido
Mas veja bem. A ER não casaria por exemplo:
Gilbertão da Silva ( o "d" de início do sobrenome é minúsculo )
matheus
(Eu não concordo com essa lista toda de acentuação.. só segui a base proposta por você.)
Edit: Demorei pra postar, hahaha... Mas vou manter a msg. :P
Eu to testando aqui a ER pra ver se dá pra melhorar.
Você precisa mesmo validar se a primeira letra é maiúscula?
Dessa forma que está a ER ela não vai validar nomes como João da Silva, pois o "da" começa com letra minúscula. Teria que digitar João Da Silva.
EDIT: Nossa, o Matheus falou a mesma coisa que eu tava postando. haha
EDIT 2:
>
(Eu não concordo com essa lista toda de acentuação.. só segui a base proposta por você.)
Eu tentei usar [:upper:] e [:lower:] mas não funcionou.
O interessante é que na página 49 do livro Piazinho diz que no Brasil deveria funcionar também com os acentos, mas mesmo setando o local pra pt_BR não funcionou.
Você sabe o por que Matheus?
Segue o código que testei:
setlocale(LC_ALL, 'pt_BR', 'ptb');
$str = 'João Da Silva';
preg_match('/^[[:upper:]]{1}[[:lower:]]+( [[:upper:]]{1}[[:lower:]]+){1,3}$/', $str, $matches);
echo '<pre>' . PHP_EOL;
var_dump($matches);
echo '</pre>' . PHP_EOL;
EDIT 3: O {1,3} eu tinha colocado só pra não permitir sobrenomes infinitos. Mas como não dá pra saber o número de sobrenomes é melhor ser infinito mesmo. :P
>
É mesmo NECESSÁRIO obrigar que a primeira letra seja maiúscula? :mellow:
Bom.. respondendo à pergunta, seria algo assim:
^[A-ZÉÚÍÓÁÈÙÌÒÀÕÃÑÊÛÎÔÂËYÜÏÖÄ][a-zéúíóáèùìòàõãñêûîôâëyüïöä]+( [A-ZÉÚÍÓÁÈÙÌÒÀÕÃÑÊÛÎÔÂËYÜÏÖÄ][a-zéúíóáèùìòàõãñêûîôâëyüïöä]+)+$
1 - Retirei o {1}, pois é o mesmo que nada. É redundante, e atrapalha a leitura à toa.
2 - Deverá haver no mínimo um sobrenome. Exemplos de strings que devem casar (não testei a regex):
Gilbertão Silva
Senor Abravanel
Um Nome Muito Comprido
Mas veja bem. A ER não casaria por exemplo:
Gilbertão da Silva ( o "d" de início do sobrenome é minúsculo )
matheus
(Eu não concordo com essa lista toda de acentuação.. só segui a base proposta por você.)
Edit: Demorei pra postar, hahaha... Mas vou manter a msg. :P
Creio que nomes e sobrenomes começam com letra uma maiuscula, já os de da não são sobrenomes, eu acho porque não conheco nenhum sr. de, ou sra. da
Acho que você não entendeu direito.
A função da sua ER é validar nomes completos de pessoas pra se certificar que ela digitou o nome completo, ou seja, nome e sobrenome, certo?
Mas se o nome da pessoa for João da Silva, por exemplo, não vai casar com essa ER, pois ela exige que TODAS as palavras comecem com letra maiúscula.
não se pode queimar uma plantação de laranja, por que uma ficou podre ...
não se pode matar uma multidão porque uma pessoa o criticou ...
não se pode cortar um cafezal, porque um café caiu do pé...
não vou fuD#r o meu script porque uma pessoa se chama João da Silva...
sua ajuda foi de muita valia, mas não se pode...
Então tá! ;)
Você sabe o por que Matheus?
É por causa da codificação. Exemplo: Se você rodar um utf8_decode antes de aplicar a string na função, funcionará com as POSIX.
Recomendo a leitura: http://forum.imasters.com.br/topic/374439-regex-e-locale/
não vou fuD#r o meu script porque uma pessoa se chama João da Silva...sua ajuda foi de muita valia, mas não se pode...
Minha opinião é de você rever isso. Existem funções que fazem manipulação de caixa nas strings. Exemplo: strtoupper(), strtolower(), ucwords(), ucfirst(). Recomendo a leitura no manual, de cada uma. ;)
>
É por causa da codificação. Exemplo: Se você rodar um utf8_decode antes de aplicar a string na função, funcionará com as POSIX.
Recomendo a leitura: http://forum.imaster...regex-e-locale/
Entendi Matheus, eu estava mesmo desconfiado que era algo com a codificação. Vou testar aqui pra saber como usar de maneira correta. :joia:
Um abraço!
é João da Silva, e Gilbertão Silva pode ficar feliz, fiz um script beleza
Modifiquei e coloquei validação pra espaços:
^[A-ZÉÚÍÓÁÈÙÌÒÀÕÃÑÊÛÎÔÂËYÜÏÖÄ]{1}[a-zéúíóáèùìòàõãñêûîôâëyüïöä]+( [A-ZÉÚÍÓÁÈÙÌÒÀÕÃÑÊÛÎÔÂËYÜÏÖÄ]{1}[a-zéúíóáèùìòàõãñêûîôâëyüïöä]+){1,3}$