2012-02-17 32 views
37

En PHP, tengo una matriz de variables que son TODAS las cadenas. Algunos de los valores almacenados son cadenas numéricas con comas.PHP eliminar comas de cadenas numéricas

lo que necesito:

Una manera de recortar las comas de cadenas, y sólo hacen esto para las series numéricas. Esto no es tan sencillo como parece. La razón principal es que el siguiente error:

$a = "1,435"; 

if(is_numeric($a)) 
    $a = str_replace(',', '', $a); 

esto falla porque $a = "1435" es numérico. Pero $a = "1,435" no es numérico. Debido a que algunas de las cadenas que obtengo serán oraciones regulares con comas, no puedo ejecutar un reemplazo de cadena en cada cadena.

+0

uso preg_replace para reemplazar selectivamente comas que están encerradas en ambos lados por [0-9]? – Daan

Respuesta

20

No se ha probado, pero probablemente algo así como if(preg_match("/^[0-9,]+$/", $a)) $a = str_replace(...)

+0

Sí, esto funciona. Probé todos los formatos de cadenas que esperaría, y esto funciona. Será una respuesta aceptada una vez que el sitio me lo permita. – user1082428

+0

Si desea eliminar las comas de los números dentro de una cadena que también contiene palabras, utilice este patrón si desea evitar la eliminación de las comas en las palabras:/[0-9] + [,] + [0-9] +/ – Flaxious

77

hacerlo al revés:

$a = "1,435"; 
$b = str_replace(',', '', $a); 

if(is_numeric($b)) { 
    $a = $b; 
} 
+0

Gracias para la respuesta, esto funciona para mí. +1 – user1082428

+1

sobrecarga potencial de llamar a 'str_replace' cada vez, pero la ausencia de expresiones regulares es una gran ventaja. – KnightHawk

2
function cleanData($a) { 

    if(is_numeric($a)) { 

    $a = preg_replace('/[^0-9,]/s', '', $a); 
    } 

    return $a; 

} 
+0

Esto también funciona, +1 – user1082428

8

Lo más fácil sería:

$var = intval(preg_replace('/[^\d.]/', '', $var)); 

o si necesita flotador :

$var = floatval(preg_replace('/[^\d.]/', '', $var)); 
+0

más 1 para un trazador de líneas agradable – Niroshan

0

probar este .THIS trabajó para mí

number_format(1235.369,2,'.','')

si utiliza Number_format como esto number_format(1235.369,2) respuesta será 1,235.37

pero si se utiliza, como a continuación

number_format(1235.369,2,'.','') respuesta será 1235.37

está eliminando el "," de "1,235.37"

0

Si desea quitar comas de los números dentro de una cadena que también contiene palabras, la manera más fácil creo que sería utilizar preg_replace_callback:

Ejemplo:    

$str = "Hey hello, I've got 12,500 kudos for you, spend it well"

function cleannr($matches) 
{ 
    return str_replace("," , "" , $matches["nrs"]); 
} 

$str = preg_replace_callback ("/(?P<nrs>[0-9]+,[0-9]+)/" , "cleannr" , $str); 


Salida:

"Hey hola, tengo 12500 felicitaciones para ti, pasarlo bien"


En este caso, el patrón (expresiones regulares) difiere de el dado en la respuesta aceptada ya que no queremos eliminar las otras comas (puntuación).

Si usaríamos /[0-9,]+/ aquí en lugar de /[0-9]+,[0-9]+/ la salida sería:

"Hey hola Tengo 12500 felicitaciones por lo pasan bien"

Cuestiones relacionadas