Código PHP para eliminar todo menos números

135

Estoy tratando de eliminar todo de una cadena pero solo números (0-9).

Pensé que esto funcionaría ...

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

Pero echos "604-619-5135". ¿¿¿Qué me estoy perdiendo???

jeffkee
fuente

Respuestas:

277

Prueba esto:

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

preg_replace utiliza PCRE que generalmente comienzan y terminan con a /.

Chris Eberle
fuente
La cita interna / doble no tiene nada que ver con PCRE aunque. Aparentemente (en los días anteriores (?flags)) las personas que diseñaron / escribieron la función / API pensaron que era una buena idea pasar las banderas de expresiones regulares con la forma de doble comilla en /flagslugar de usar un parámetro de función adicional.
Qtax
66
@Qtax: buen punto, sí, sé que de ahí es de donde sacamos la palabra "grep" ("g / re / p")
Chris Eberle
109

Esto es para futuros desarrolladores, también puedes probar esto. Simple también

echo preg_replace('/\D/', '', '604-619-5135');
Navneil Naicker
fuente
41
Hola, soy un desarrollador del futuro. De hecho, esto ha servido bien a nuestras necesidades. Gracias.
zesda
66
Soy de más lejos en el futuro que Zesda y puedo confirmarlo, todavía es una ayuda
myshadowself
3
Regresé 2 en el futuro y puedo confirmar que todavía no han encontrado una mejor manera.
Eoin
44
Soy el último desarrollador del futuro más lejano. Me entristece decir que esto ya no sirve de nada. Ustedes no deberían haber usado tantas pajitas de plástico, créanme que verán cuando lleguen aquí ... Si lo logran.
Jeremy
2
Solo para tu información: nosotros en el siglo 39 todavía usamos esto.
usuario-44651
3

Una forma mucho más práctica para aquellos que no quieren usar expresiones regulares:

$data = filter_var($data, FILTER_SANITIZE_NUMBER_INT);

nota: también funciona con números de teléfono.

Alp Altunel
fuente