【问题标题】:Add leading zero if number is under 10 in PHP如果 PHP 中的数字小于 10,则添加前导零
【发布时间】:2021-04-15 16:05:34
【问题描述】:

如果数字小于 10,我想创建一个带有前导零的分页:

我的分页输出类似的 HTML:

<div>
    <a href="#">&lt;</a>
    <span>7</span>
    <a href="#">8</a>
    <a href="#">9</a>
    <a href="#">10</a>
    <a href="#">11</a>
    <a href="#">&gt;</a>
</div>

我正在尝试使用preg_replace 函数来捕获单个数字并添加前导零,但我不知道如何保留数字:

$r = preg_replace('/>[0-9]</', '>01<', $r);
return $r;

我用str_replace 解决了这个问题,但这很难看:

$r = str_replace(array('>1<','>2<','>3<','>4<','>5<','>6<','>7<','>8<','>9<'), array('>01<','>02<','>03<','>04<','>05<','>06<','>07<','>08<','>09<'), $r);

【问题讨论】:

  • @aynber 这个问题没有说明当号码被preg_replace()替换时该怎么做。
  • @Barmar 啊,我没有意识到 OP 在生成 HTML 后试图这样做。
  • 最好在生成 HTML 时首先执行此操作,而不是稍后修复它。
  • 我正在使用内置函数来显示分页,所以我必须修改 HTML 输出

标签: php pagination preg-replace leading-zero


【解决方案1】:

是的,你可以使用sprintf实现它

$numPadded = sprintf("%02d", $num);
echo $numPadded; 

【讨论】:

  • preg_replace() 中展示如何做到这一点。您需要使用preg_replace_callback(),这似乎有点过头了。
【解决方案2】:

您需要捕获原始号码并将其复制到替换中。

$r = preg_replace('/>([0-9])</', '>0$1<', $r);

也就是说,使用正则表达式处理 HTML 通常是个坏主意。您应该使用适当的解析器,例如DOMDocument

或者在创建 HTML 时首先使用 sprintf()str_pad() 生成带前导零的数字。

【讨论】:

  • 如何获取原始号码以在preg_replace中使用?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-30
  • 1970-01-01
  • 2018-08-29
  • 1970-01-01
  • 2018-07-08
  • 1970-01-01
相关资源
最近更新 更多