Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Cristiano Cordeiro

[Resolvido] Expressão regular

Recommended Posts

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 ?

 

Testar expressão regular

Compartilhar este post


Link para o post
Compartilhar em outros sites

Modifiquei e coloquei validação pra espaços:

 

^[A-ZÉÚÍÓÁÈÙÌÒÀÕÃÑÊÛÎÔÂËYÜÏÖÄ]{1}[a-zéúíóáèùìòàõãñêûîôâëyüïöä]+( [A-ZÉÚÍÓÁÈÙÌÒÀÕÃÑÊÛÎÔÂËYÜÏÖÄ]{1}[a-zéúíóáèùìòàõãñêûîôâëyüïöä]+){1,3}$

Compartilhar este post


Link para o post
Compartilhar em outros sites

É 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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

É 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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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...

Compartilhar este post


Link para o post
Compartilhar em outros sites
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. ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

É 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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.