【问题标题】:Remove leading and trailing zeros from string that contains a numeric value using php使用php从包含数值的字符串中删除前导零和尾随零
【发布时间】:2013-11-07 22:35:34
【问题描述】:

我正在尝试从包含用于表示百分比的数值的字符串中修剪前导零和尾随零。

我编写了这段丑陋的代码块,它结合了 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 => .005

【问题讨论】:

  • 为什么不直接使用floatval()?如果您需要将其保留为字符串,可以使用$floatString = "" . floatval($oldString);

标签: php regex string


【解决方案1】:

尝试以下方法:

/^0+|\..+?\K0+$/g

这要么匹配字符串开头^0+ 处的一个或多个0s,要么匹配字符串结尾0+$ 处的一个或多个0s。

在 PHP 中:

preg_replace_all("/^0+|\..+?\K0+$/", "", $value)

注意:我建议使用非正则表达式解决方案,因为它们更适合这种简单的情况。尽管如此,我还是发布了这个,因为您要求使用正则表达式。

Regex101 Demo

【讨论】:

  • 感谢您的回答!但不幸的是,如果我输入“100”被修剪成“1”,这个解决方案似乎不起作用
  • @MarcoMatarazzi 我已经修改了我的正则表达式来解决这个问题。
  • 我查看了您的解决方案,但它似乎不起作用(甚至在演示站点上也没有):(
  • @MarcoMatarazzi 真的很抱歉,我已经修复了正则表达式和演示。我今天真的很累,我想我应该在这之后去睡觉:)
  • 请提供preg_replace_all()的php文档链接...我想了解一下。
【解决方案2】:

只需cast你的字符串到float

$s = '0010.003000';
echo (float) $s;
//=> 10.003

【讨论】:

  • 感谢您的回答!但是(如问题中所述)我无法转换为浮动,这就是为什么这个问题对我来说并不容易:)
  • 我觉得很奇怪你想使用正则表达式来完成这个任务,理想情况下应该使用我在这里展示的方式来完成。
  • 我同意你的观点,你的解决方案将适用于没有我疯狂的“无演员”条件的其他所有人。
【解决方案3】:

您可以使用floatval 代替正则表达式:

<?php
$str = "0010.003000";
print floatval($str);

输出:10.003

【讨论】:

    【解决方案4】:

    你对这样的正则表达式有什么看法?

    echo preg_replace("/((^0+)|(0+$))/", "", $value);

    好的,现在我明白了问题所在;)试试这个:

    echo preg_replace("/^0*([1-9][0-9]*(\.[0-9]*[1-9]))?0*$/", "$1", $value);
    

    【讨论】:

      【解决方案5】:

      为了回答你的奇怪问题,我添加了对返回 00.000 的支持:

      $nbr = preg_replace('/^(0)+\.?0*$|^0+|\.0*$|\.\d+?\K0+$/', '$1', $nbr);
      

      【讨论】:

        猜你喜欢
        • 2014-08-09
        • 2012-10-19
        • 2022-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-09
        相关资源
        最近更新 更多