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

jeffkee
fonte

Respostas:

276

Tente o seguinte:

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

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

Chris Eberle
fonte
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');
Navneil Naicker
fonte
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.

Alp Altunel
fonte