我正在尝试从包含用于表示百分比的数值的字符串中修剪前导零和尾随零。
我编写了这个丑陋的代码块,它将rtrim(),ltrim()与preg_replace()结合起来:
rtrim(ltrim(preg_replace("/\d*\.(0(?![0$])|[1-9])*\K0+$/", "", $value),"0"), ".")
但它似乎不起作用,因为如果输入0010.003000,则输出为10.003000而不是所需的10.003
有没有办法在Php中从右到左读取正则表达式(从右边删除零,直到找到零或[1-9])?或者有没有办法改善我的正则表达式以实现我的目标?
重要提示: 由于一些可论证的原因,我不能做一个简单的演员来漂浮,只是享受玩电子游戏所节省的时间。
为了更好地解释我的奇怪问题,这里有一些具有预期行为的样本: 01.00 => 1, 100 => 100, 002.0050 => 2.005, 0.005 => 0.005
答案 0 :(得分:2)
尝试以下方法:
/^0+|\..+?\K0+$/g
这可以匹配字符串开头0
处的一个或多个^0+
,或者匹配字符串结尾{{1}处的一个或多个0
s }}
在PHP中:
0+$
注意:我建议使用非正则表达式解决方案,因为它们更适合这种简单的情况。不过我发布了这个是因为你要求正则表达式。
答案 1 :(得分:1)
echo trim('0010.003000', '0');
答案 2 :(得分:0)
只需施放您的字符串到float
:
$s = '0010.003000';
echo (float) $s;
//=> 10.003
答案 3 :(得分:0)
答案 4 :(得分:0)
你对这样的正则表达式怎么说?
echo preg_replace(“/((^ 0+)|(0 + $))/”,“”,$ value);
好的,现在我明白了这个问题;)试试这个:
echo preg_replace("/^0*([1-9][0-9]*(\.[0-9]*[1-9]))?0*$/", "$1", $value);
答案 5 :(得分:0)
要回答您的奇怪问题,我添加了对返回0.000
的{{1}}的支持:
0