在PHP中,我有一个包含所有字符串的变量数组。存储的某些值是带逗号的数字字符串。
我需要什么:
从字符串中修剪逗号的方法,并且只对数字字符串执行此操作。这并不像看起来那么简单。主要原因是以下失败:
$a = "1,435";
if(is_numeric($a))
$a = str_replace(',', '', $a);
此操作失败,因为$a = "1435"
是数字。但$a = "1,435"
不是数字。因为我得到的一些字符串将是带逗号的常规句子,所以我不能在每个字符串上运行字符串替换。
答案 0 :(得分:86)
反过来说:
$a = "1,435";
$b = str_replace( ',', '', $a );
if( is_numeric( $b ) ) {
$a = $b;
}
答案 1 :(得分:21)
未经过测试,但可能类似于if(preg_match("/^[0-9,]+$/", $a)) $a = str_replace(...)
答案 2 :(得分:15)
最简单的是:
$var = intval(preg_replace('/[^\d.]/', '', $var));
或者如果你需要浮动:
$var = floatval(preg_replace('/[^\d.]/', '', $var));
答案 3 :(得分:2)
function cleanData($a) {
if(is_numeric($a)) {
$a = preg_replace('/[^0-9,]/s', '', $a);
}
return $a;
}
答案 4 :(得分:2)
试试这个。这对我有用
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”的“,”
答案 5 :(得分: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的荣誉,你花得很好”
答案 6 :(得分:0)
听起来filter_var()
似乎是您想要的理想解决方案:
$a = filter_var($a, FILTER_VALIDATE_FLOAT, FILTER_FLAG_ALLOW_THOUSAND);
(请注意,它使用的是FILTER_VALIDATE_FLOAT而不是FILTER_VALIDATE_INT,因为该当前没有FILTER_FLAG_ALLOW_THOUSAND选项)。