PHP eliminar comas de cadenas numéricas


En PHP, tengo una matriz de variables que son TODAS 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 SOLO hacer esto para cadenas numéricas. Esto no es tan sencillo como parece. La razón principal es que lo siguiente falla:

$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. Porque algunas de las cadenas que obtengo serán oraciones regulares con comas, no puedo ejecute un reemplazo de cadena en cada cadena.

Author: ThiefMaster, 2012-02-18

6 answers

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

 20
Author: Kenaniah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-17 20:28:07

Hazlo al revés:

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

if( is_numeric( $b ) ) {
    $a = $b;
}
 83
Author: JJJ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-17 11:23:20

El más fácil sería:

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

O si necesitas flotar:

$var = floatval(preg_replace('/[^\d.]/', '', $var));
 12
Author: Jayela,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-07 17:24:39
 function cleanData($a) {

     if(is_numeric($a)) {

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

     return $a;

}
 2
Author: Ryan M,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-17 20:30:37

Prueba esto .esto funcionó para mí

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

Si usa number_format de esta manera number_format(1235.369,2) respuesta será 1,235.37

Pero si usas como abajo

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

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

 0
Author: kaushi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-06 07:31:15

Si desea eliminar comas de los números dentro de una cadena que también contiene palabras, la forma más fácil creo que 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, hola, tengo 12500 felicitaciones para ti, gástalo bien"


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

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

"Hey hola tengo 12500 felicitaciones para que lo gastes bien"

 0
Author: Flaxious,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-06 19:30:00