PHP从数字string中删除逗号

在PHP中,我有一个所有string的variables数组。 一些存储的值是用逗号的数字string。

我需要的:

从string中修剪逗号的方法,只对数字string执行此操作。 这不像看起来那么简单。 主要原因是以下失败:

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

这失败了,因为$a = "1435"是数字。 但$a = "1,435"不是数字。 因为我得到的一些string将是用逗号的正则句,所以我不能在每个string上运行一个stringreplace。

未经testing,但可能类似if(preg_match("/^[0-9,]+$/", $a)) $a = str_replace(...)

反过来这样做:

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

最简单的将是:

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

或者如果你需要浮动:

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

试试这个,这个为我工作

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

如果使用number_format这样的number_format(1235.369,2)答案将是1,235.37

但如果你使用下面

number_format(1235.369,2,'.','')答案是1235.37

它删除了“1,235.37”的“,”

如果要从包含单词的string中的数字中删除逗号,最简单的方法是使用preg_replace_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的荣誉,花好了”

在这种情况下,模式(正则expression式)与接受的答案中给出的模式不同,因为我们不想删除其他逗号(标点符号)。

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

“嘿,你好,我已经得到12500的荣誉,你花了很好”