Estou procurando uma função php que pegará uma string de entrada e retornará uma versão limpa dela removendo todos os caracteres especiais, deixando apenas o alfanumérico.
Preciso de uma segunda função que faça o mesmo, mas retorne apenas caracteres alfabéticos AZ.
Qualquer ajuda muito apreciada.
unichars '\p{Latin}' '\p{Alphabetic}' '[^A-Za-z]' | wc -l
== 1192 pontos de código que são alfabéticos latinos, mas que não são AZ. É um mito comum que ASCII seja suficiente para o inglês. Não é, e é por isso que escrever AZ tem um cheiro de código .Respostas:
Aviso: Observe que o inglês não se restringe apenas a AZ.
Tente isso para remover tudo, exceto az, AZ e 0-9:
Se sua definição de alfanumérico inclui letras em idiomas estrangeiros e scripts obsoletos, você precisará usar as classes de caracteres Unicode.
Tente isso para deixar apenas AZ:
O motivo do aviso é que palavras como currículo contêm a letra
é
que não corresponde a isso. Se você deseja corresponder a uma lista específica de letras, ajuste a expressão regular para incluir essas letras. Se você quiser combinar todas as letras, use as classes de caracteres apropriadas conforme mencionado nos comentários.fonte
[\p{Alphabetic}\p{Numeric}]
. Esqueci a propriedade alfabética PCRE, mas você pode fazer uma aproximação com[\pL\pM\pN]
.[A-Z]
sempre está errado, às vezes .i
mas sempre tive que me preocupar com a demografia do inglês. Esqueço que muitas pessoas precisam pensar em outras línguas. BTW, acabei de notar que você é o usuário com a maior reputação que nunca fez 1 pergunta. Até Jon Skeet já fez perguntas antes!Em vez disso
preg_replace
, você sempre pode usar as funções de filtro do PHP usando afilter_var()
função comFILTER_SANITIZE_STRING
.fonte
FILTER_SANITIZE_STRING
? Pelo que sei, o mais próximo que pode ser arquivado dessa forma é comFILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH
, mas isso não deixará apenas letras e números, mas também pontos, barras, porcentagens e tudo mais.fonte