Ir para conteúdo

POWERED BY:

Arquivado

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

leo_SJCampos

[Resolvido] Expressao Regular pra evitar abreviação

Recommended Posts

Galera. preciso de uma ajuda..

Alguem sabe alguma expressão regular que evite o usuario a abreviar o nome?

eu até consegui tirar os pontos, mas mesmo assim, eles abreviam só com uma letra..

 

ex: Joao da S Moreira

 

esse S não poderá ser gravado dessa forma.

Alguem pode me ajudar?

 

Valeu pessoal

Compartilhar este post


Link para o post
Compartilhar em outros sites

analise o padrão:

 

blabla L blabla

 

ali ao redor você tem:

 

espaco Letra espaço

 

então, oq você precisa casar, é se existe uma letra sozinha no meio de 2 espaços.

Faça a tua ER com isso. Assim q se constroi ERs, analisando o padrão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um pequeno complemento seria, além dessa letra à deriva, verificar se ela está acompanhada de um ponto.

 

Eu por exemplo se fosse abreviar alguma coisa no teu site colocaria ele.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se está certo não ...

<?php
$String = 'João S  s.  s.  .s da Silva Sauro' ;
preg_match_all( '~\s{1,}(\.+[a-zA-Z0-9]|[a-zA-Z0-9]\.+|[a-zA-Z0-9]){0,1}+\s~' , $String , $Match ) ;

echo '<pre>';
	print_r( $Match );

 

Saída

Array
(
   [0] => Array
       (
           [0] =>  S 
           [1] =>  s. 
           [2] =>  s. 
           [3] =>  .s 
       )

   [1] => Array
       (
           [0] => S
           [1] => s.
           [2] => s.
           [3] => .s
       )

)

Compartilhar este post


Link para o post
Compartilhar em outros sites

[a-zA-Z0-9]|[a-zA-Z0-9]

wtf ??

 

ta complicada demais essa ER @Andrey..

 

se o cara digitar um ponto antes da Letra, então temos um erro de digitação, e não uma abreviação.

e como bem lembrado pelo @JBN, podem existir nomes assim:

 

Oliveira e Oliveira

 

por isso, que eu limitaria a:

 

espaco LETRA MAIUSCULA(ponto opcional) espaço

 

tão simples qnto isso..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu acho que algo como:

 

/\s*[a-df-zA-D-F-Z]\.?\s*/

Já resolveria, pelo menos na língua portuguesa. A menos, é claro, que existam outras possibilidades de letras usadas como conectivos de nomes que não seja a letra E.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não excluiria o E... como eu disse, apenas restringir a letras maiusculas. Somente isso.

 

galera.. simples.. simples..

 

/\s+[A-Z]{1}\.?\s+/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal desculpe a demora para responder... Mas se eu restringir a letra maiuscula como disse o William Bruno, não estará consistente ainda. Pois se o usuario digitar o sobrenome com letra minuscula ele vai passar nao vai?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ahá! E chegamos ao ponto em que eu defendi veementemente antes do tópico ser assassinado.

 

Que bom que mais alguém pensa como eu. Desculpem se pode parecer meio ácido, mas agora sou eu quem quer ver o 'Getting Real" resolvendo isso. :lol:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ai é simples amigo leo_SJCampos. Todo nome para ser escrito corretamente tem de ter a primeira letra maiúscula. Ex: Bruno Augusto.

Se o usuário escrever tudo em minúsculo vai estar incorreto não? Se utilizar a função ucwords() esse problema não mais ocorrerá. ^_^

Já resolve 2 "problemas" em uma cajadada só :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um pequeno porém, Periscuelo, para que ucwords() funcione de maneira uniforme em todos os servidores, em todas as instalações, até onde me consta, a string tem, primeiro, de passar por strtolower():

 

$string = ucwords( strtolower( $string ) );

Porém, um nome, nos casos mais pomposos ou tradicionais, existem alguns conectivos que devem ser todo em minúsculas, como por exemplo: san, von, di e etc.

 

"Entre o povão", temos o e, de, da, do e etc.

 

Com isso algo um pouco mais trabalhado deve ser elaborado. Algo como um recapitalizador de strings que mencionei nesse "tópico assassinado" que ajusta 99% de um dado texto, desde que configurado adequadamente ao idioma de origem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ai então perde o sentido amigo Bruno. O que impede o usuário de escrever di,san,von e etc em Maiúsculo? Com a primeira ou a Ultima letra de forma errada?

Concorda comigo que não da pra fazer uma expressão regular que controle tudo isso? Porque tanto empenho em fazer algo elaborado se não da pra fazer

o usuário escrever tudo da forma correta? Imagine as N possibilidades que o usuário tem de fazer errado. Quantos conectivos em quantos idiomas existem???

 

Ou se utiliza algo simples e deixa os erros de grafia por conta de usuário ou vai se desenvolvendo rotinas tão complexas para ratificar o usuário que se perde mais

tempo com isto doque com o resto do desenvolvimento do sistema. O ucwords seria uma forma de padronizar a escrita simplificando a solução. Alguns sistemas

convertem tudo para uppercase para não ter de se preocupar com tantos pormenores, outros porque facilita a leitura, mas todos seguem um padrão para facilitar o

desenvolvimento e a funcionalidade do sistema. Na minha opnião fica melhor padronizando.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas não é complexo, só parece. Claro, uma única ER é impossível, mesmo porque você tem dois caminhos a trilhar, um após o outro: Recapitalizar e só então verificar.

 

Para recapitalizar, se não me engano (não tenho o arquivo aqui agora), usei, na época que precisei, três ER's, num preg_replace().

 

Resolveu 99% dos casos. Teve uma circunstância, acho que com um C-Cedilha que falhou, ficando só ele maiúscula no meio da palavra.

 

Claro, hoje posso fazer melhor, mas na época eu era bem mais cru do que sou hoje, e ainda assim ficou bom.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Pois se o usuario digitar o sobrenome com letra minuscula ele vai passar nao vai?

mas ai temos outra coisa, que deve ser responsabilidade de um outro método, q é praticamente impossível de ser escrito.

 

Validar se ele não digitou abreviações, se resolve da forma que propus.

Validar erros de digitação, é uma outra história, e deve ser tratado aparte, depois de ter resolvido o primeiro problema.

 

 

Para este caso, pessoalmente me parece ser algo não necessário, e complicado deveras, visto os diversos desdobramentos que podem ocorrer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

então a abreviação de junior vai passar - jr

 

Gente, estão ficando loucos?

 

Vocês vão ficar velhos e carecas antes de conseguirem validar todas as possibilidades de abreviação de nomes e acreditem, não vão conseguir validar todas.

 

Avisem o usuário que não pode e pronto :seta: "Preencha seu nome sem abreviações".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom pessoal, ja que ficou complicado, resolvi fazer da maneira mais simples.. Como eu verifico isso no PHP e retorno o resultado via JSON criei uma função que verifica se há espaço entre a letra usando o strstr

 

$nome = strtoupper($_REQUEST['nome']);
if( strstr($nome," A ")){
	echo "{result:0 message:'NOME NAO PODE SER ABREVIADO'}";
}else{
 echo "{result:1 message: OK}";
}

 

Fiz isso para cada letra, e uso a expressão regular

 

/([a-zA-Z\s]+)$/ 

 

para permitir somente letras e sendo assim, proibo o uso de numeros e pontos..

 

Não foi a melhor maneira de resolver, mas a principio deu certo..

 

Valeu pela força pessoal....

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.