0
$value = preg_replace("/[^0-9]+/", '', $value);

我怎么能编辑这个正则表达式来删除小数点后的所有内容?可能有也可能没有小数点。

目前“100.1”变为 1001 但应该是 100。

功能齐全:

   function intfix($value)
    {
        $value = preg_replace("/[^0-9]+/", '', $value);
        $value = trim($value);
        return $value + 0;
    }

它用于格式化用户输入的数字以及服务器输出以格式化数据库的数字。这些函数处理非常大的数字,所以我不能使用 intval 或类似的。欢迎任何额外的意见来改进这个功能。

4

3 回答 3

1

您需要有一个以小数位开始搜索的模式。目前你只删除.它后面的数字......所以你可以这样做'/\.[\d]+/'

$text = "1201.21 12 .12  12.21";
$text = preg_replace('/\.[\d]+/', '' ,$text);

上面的代码会导致$text = "1201 12 12"

于 2013-07-13T18:35:35.833 回答
1

您可以将正则表达式更改为/[^0-9].*/s.

.*匹配零个或多个字符,因此第一个不是数字的字符以及紧随其后的数字将被删除。

于 2013-07-13T18:37:53.467 回答
0

为什么不$value = round($value, 0);呢?这可以处理较大的值,并且意味着在数学上摆脱以下小数(我宁愿将数字作为数字而不是字符串处理)。PHP_ROUND_HALF_DOWN如果您只想摆脱小数10.7-> ,可以将其作为第三个参数传递10。或者floor($value);也可以工作。

于 2013-07-13T18:37:05.937 回答