PHP 从数字字符串中删除逗号

在 PHP 中,我有一个变量数组,它们都是字符串。存储的一些值是逗号数字字符串。

我需要:

一种从字符串中修剪逗号的方法,并且只对数字字符串执行此操作。这不像看起来那么简单。主要原因是:

$a = "1,435";


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

这将失败,因为 $a = "1435"是数值型的。但是 $a = "1,435"不是数字。因为我得到的一些字符串将是带逗号的普通句子,所以我不能对每个字符串运行字符串替换。

157089 次浏览

没有测试过,但可能是 if(preg_match("/^[0-9,]+$/", $a)) $a = str_replace(...)之类的

反过来做:

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


if( is_numeric( $b ) ) {
$a = $b;
}
 function cleanData($a) {


if(is_numeric($a)) {


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


return $a;


}

最简单的方法是:

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

或者如果你需要浮动:

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

试试这个,这个对我有用

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

如果像这样使用 number _ format number_format(1235.369,2)的答案是 < em > 1,235.37

但是如果你使用如下

答案是 1235.37

它去掉了“1235.37”中的“ ,”

如果你想从字符串 还有包含单词的数字中删除逗号,我认为最简单的方法是使用 Preg _ place _ callback:

例如:

$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);


产出:

“嘿,你好,我有12500美元给你,好好花”


在这种情况下,模式(regex)不同于公认答案中给出的模式,因为我们不想删除其他逗号(标点符号)。

如果我们在这里使用 /[0-9,]+/而不是 /[0-9]+,[0-9]+/,输出将是:

“嘿,你好,我有12500美元给你,好好花”

这听起来像是你正在寻找的理想的解决方案是 filter_var():

$a = filter_var($a, FILTER_VALIDATE_FLOAT, FILTER_FLAG_ALLOW_THOUSAND);

(注意,它使用 FILTER _ VALIDATE _ FLOAT 而不是 FILTER _ VALIDATE _ INT,因为它当前没有 FILTER _ FLAG _ ALLOW _ THOUSAND 选项)。

这样吧:

/**
* This will parse the money string
*
* For example 1, 234, 456.00 will be converted to 123456.00
*
* @return
*/
function parseMoney(string $money) : float
{
$money = preg_replace('/[ ,]+/', '', $money);
return number_format((float) $money, 2, '.', '');
}

例子;

parseMoney('-1, 100,   000.01'); //-1100000.01