una ultimo remove quitar primer parte palabra eliminar caracteres caracter cadena php string replace numbers comma

ultimo - PHP elimina comas de cadenas numéricas



substr php (6)

Hazlo al revés:

$a = "1,435"; $b = str_replace( '','', '''', $a ); if( is_numeric( $b ) ) { $a = $b; }

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

Lo que necesito:

Una forma de recortar las comas de las cadenas, y SÓLO hacer esto para las cadenas numéricas. Esto no es tan sencillo como parece. La razón principal es que falla lo siguiente:

$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.


Lo más fácil sería:

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

o si necesita flotar:

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


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


Prueba esto. Esto funcionó para mí

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

si usa number_format como este number_format(1235.369,2) respuesta será 1,235.37

pero si lo usa a continuación

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

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


Si desea eliminar las comas de los números dentro de una cadena que también contiene palabras, la manera más fácil que creo sería usar 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:

"Hola, tengo 12500 felicitaciones para ti, lo gasto bien"


En este caso, el patrón (regex) difiere del que figura en la respuesta aceptada, ya que no queremos eliminar las otras comas (puntuación).

Si usáramos /[0-9,]+/ aquí en lugar de /[0-9]+,[0-9]+/ la salida sería:

"Hola, tengo 12500 felicitaciones por gastarlo bien"


function cleanData($a) { if(is_numeric($a)) { $a = preg_replace(''/[^0-9,]/s'', '''', $a); } return $a; }