2011-01-09 15 views
6

Odio las expresiones regulares y esperaba que alguien pudiera ayudar con una expresión regualar para usar con preg_replace.preg_replace - elimina los caracteres no deseados de la cadena para devolver el valor numérico

Quiero quitar los caracteres no deseados de una cadena para devolver solo un valor numérico usando preg_replace.

formato

La cadena podría ser la siguiente:

algún texto £ 100

100 £ algún texto

algo de texto 100 Parte del texto

Muchas gracias

+1

Así que todos estos rendimiento 100, ¿verdad? ¿Qué pasa con '1abc00'? – BoltClock

+1

Mejor aún, ¿qué tal '£ 1.00'? – Kobi

Respuesta

16
$NumericVal = preg_replace("/[^0-9]/","",$TextVariable); 

el^dentro de la [] significa nada, excepto lo siguiente

Editar eliminado superflua +

+1

muy eficiente, excelente respuesta –

+0

¿por qué no utilizar '\ D' por curiosidad ...? muchas respuestas en la web usan no números en lugar del "no dígito" incorporado – nicorellius

+0

@nicorellius Escribí esto muy rápido cuando respondí, así que realmente no pensé en usarlo, es todo, y no lo he pensado desde entonces. edítelo para usar \ d. Aunque es más fácil de leer para personas sin un buen conocimiento de las diferentes opciones de expresiones regulares. –

0
preg_replace('/[^0-9]/','',$text); 
+0

Esto le da '100' al ejemplo de Boltclock, también. – AndreKR

+0

necesita el + de lo contrario solo reemplazará el primer número no –

+1

No, eso es parcialmente cierto para 'preg_match' pero no para' preg_replace'. Al igual que cualquier reemplazo normal, 'preg_replace' reemplaza cada ocurrencia de un caracter que es' [^ 0-9] 'sin nada y luego continúa su búsqueda con el siguiente caracter. – AndreKR

0

Pruebe esto:

preg_replace("/\D+/", "", "SOME TEXT £100") 

También puede utilizar preg_match para obtener el primer número:

preg_match("/\d+/", "SOME TEXT £100", $matches); 
$number = $matches[0]; 
8
$l = preg_replace("/[^A-Z0-9a-z\w ]/u", '', $l); 

Trabaja bruja UTF-8, permite solo A-Z a-z 0-9 łwóc ... etc

Cuestiones relacionadas