66

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

我需要的:

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

$a = "1,435";

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

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

4

7 回答 7

111

反过来做:

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

if( is_numeric( $b ) ) {
    $a = $b;
}
于 2012-02-17T20:29:15.480 回答
26

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

于 2012-02-17T20:28:07.030 回答
24

最简单的是:

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

或者如果你需要浮动:

$var = floatval(preg_replace('/[^\d.]/', '', $var));
于 2015-04-07T17:24:39.837 回答
7

试试这个。这对我有用

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”的“,”

于 2017-09-06T06:20:09.253 回答
6

听起来您正在寻找的理想解决方案是filter_var()

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

(请注意,它使用 FILTER_VALIDATE_FLOAT 而不是 FILTER_VALIDATE_INT,因为它当前没有 FILTER_FLAG_ALLOW_THOUSAND 选项)。

于 2019-08-26T22:02:30.480 回答
2
 function cleanData($a) {

     if(is_numeric($a)) {

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

     return $a;

}
于 2012-02-17T20:30:37.667 回答
1

如果要从包含单词的字符串中的数字中删除逗号,我认为最简单的方法是使用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点赞给你,好好消费”


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

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

“你好,我有 12500 点赞,你花的好”

于 2017-09-06T19:11:53.693 回答