Preciso remover todos os caracteres de uma sequência que não esteja no a-z A-Z 0-9
conjunto ou não seja espaços.
Alguém tem uma função para fazer isso?
Parece que você quase sabia o que queria fazer, basicamente o definiu como um regex.
preg_replace("/[^A-Za-z0-9 ]/", '', $string);
preg_replace('/[^A-Za-z0-9 ]/', '', $string);
Para caracteres unicode, é:
fonte
\w
inclui\d
e assim o\d
é desnecessário. Além disso, isso está errado porque também deixará sublinhados na string resultante (que também está incluída em\w
).i
bandeira é realmente necessária aqui, já que[:alnum:]
já abrange os dois casos?Expressão regular é a sua resposta.
i
significado de maiúsculas e minúsculas.^
significa, não começa com.\d
corresponde a qualquer dígito.a-z
corresponde a todos os caracteres entrea
ez
. Por causa doi
parâmetro, você não precisa especificara-z
eA-Z
.\d
haver um espaço, os espaços são permitidos nesse regex.fonte
aqui está um regex realmente simples para isso:
e usado conforme necessário (com um
/
delimitador de barra).Teste aqui com esta ótima ferramenta que explica o que a regex está fazendo:
http://www.regexr.com/
fonte
/u
bandeira, caso contrário, as letras não-ascii também serão removidas.[\W_]+
Se você precisar oferecer suporte a outros idiomas, em vez do AZ típico, use o seguinte:
[^\p{L}\p{N} ]
define uma classe de caracteres negada (corresponderá a um caractere que não está definido) de:\p{L}
: uma carta de qualquer idioma.\p{N}
: um caractere numérico em qualquer script.: um caractere de espaço.
+
avidamente corresponde à classe de personagem entre 1 e vezes ilimitadas .Isso preservará letras e números de outros idiomas e scripts, além do AZ:
Nota: Essa é uma pergunta muito antiga, mas ainda relevante. Estou respondendo apenas para fornecer informações adicionais que possam ser úteis para futuros visitantes.
fonte
Ele seleciona nem todos AZ, az, 0-9 e o exclui.
Veja o exemplo aqui: https://regexr.com/3h1rj
fonte
\W
é o inverso dos\w
quais são caracteresA-Za-z0-9_
. Portanto\W
, corresponderá a qualquer caractere que não sejaA-Za-z0-9_
e os removerá. O[]
é um limite do conjunto de caracteres . A+
é redundante em um limite de conjunto de caracteres, mas normalmente significa 1 ou mais caracteres. Ou
sinalizador expande a expressão para incluir suporte a caracteres unicode, o que significa que não removerá caracteres além do código de caracteres 255, comoª²³µ
. Exemplo de vários usos 3v4l.org/hSVV5 com caracteres unicode e ascii.Você pode testá-lo aqui: http://regexr.com/
fonte
Eu também estava procurando a resposta e minha intenção era limpar todos os não-alfa e não deveria haver mais de um espaço.
Então, eu modifiquei a resposta de Alex para isso, e isso está funcionando para mim
preg_replace('/[^a-z|\s+]+/i', ' ', $name)
O regex acima virou
sy8ed sirajul7_islam
parasy ed sirajul islam
Explicação: regex irá verificar Não é qualquer de A a Z no caso insensível maneira ou de mais de um espaços em branco, e ele será convertido em um único espaço.
fonte
Você pode dividir a sequência em caracteres e filtrá-la.
fonte
preg_replace()
chamada simples e simples .