Código PHP para remover tudo, menos números


135

Estou tentando remover tudo de uma string, mas apenas números (0-9).

Eu pensei que isso iria funcionar ..

echo preg_replace("[^0-9]","",'604-619-5135');

Mas ecoa "604-619-5135". O que estou perdendo???

Respostas:


276

Tente o seguinte:

preg_replace('/[^0-9]/', '', '604-619-5135');

preg_replace usa PCREs que geralmente começam e terminam com a /.


A citação interna / dupla não tem nada a ver com o PCRE. Aparentemente (nos dias anteriores (?flags)), as pessoas que projetaram / escreveram a função / API acharam uma boa idéia passar os sinalizadores de regex com o formato de aspas duplas /flags, em vez de usar um parâmetro de função extra.
Qtax 07/07

6
@Qtax: bom ponto, sim, eu sei que é onde temos a palavra "grep" a partir de ( "g / re / p")
Chris Eberle

109

Isto é para futuros desenvolvedores, você também pode tentar isso. Simples também

echo preg_replace('/\D/', '', '604-619-5135');

41
Olá, eu sou um desenvolvedor do futuro. Isso realmente serviu bem as nossas necessidades. Obrigado.
Zesda

6
Eu sou de ainda mais no futuro do que Zesda e pode confirmar, ainda é uma ajuda
myshadowself

3
Voltei 2 no futuro e posso confirmar que ainda não encontraram uma maneira melhor.
Eoin

4
Sou o último desenvolvedor do futuro mais distante. Lamento dizer que isso não tem mais utilidade. Vocês não deveriam ter usado tantos canudos de plástico, confie em mim que verá quando chegar aqui ... Se conseguir.
Jeremy

2
Apenas para sua informação: nós, no século 39, ainda usamos isso.
user-44651 21/01


3

uma maneira muito mais prática para quem não deseja usar o regex:

$data = filter_var($data, FILTER_SANITIZE_NUMBER_INT);

nota: também funciona com números de telefone.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.