【问题标题】:PHP preg_replace number of digitsPHP preg_replace 位数
【发布时间】:2012-07-16 06:46:15
【问题描述】:

我有这个:

preg_replace('/(\d{1}|\d{2})/gi', '$1', 'some number');

如果文本是一位数字 $1 返回一位数字,如果是 2 位则返回 2 位数字....,但我需要返回的数字始终是 2 位数字:

1 => 01 
2 => 02
...
10 => 10
...
99 => 99

我该怎么做?

【问题讨论】:

  • 为什么不简单地使用(\d{1,2}) 而不是(\d{1}|\d{2})

标签: php regex pcre


【解决方案1】:

你的意思是像这个?使用e修饰符,使用preg_replace函数执行php代码,任何str_padsprintf都可以满足你的要求。

preg_replace('/(\d{1}|\d{2})/ie', 'sprintf("%02d",$1)', 'some number');

【讨论】:

    【解决方案2】:

    使用 str_pad()。它便宜很多。 http://php.net/str_pad

    【讨论】:

      【解决方案3】:

      为什么这么复杂? KISS 并使用 str_pad

      echo str_pad($input, 2, "0", STR_PAD_LEFT);
      

      【讨论】:

      • 查看上一个答案中的评论。
      • @kog 你应该提这个问题
      【解决方案4】:

      请使用str_pad()e 修饰符自 PHP 5.5.0 起已弃用,应避免使用。

      【讨论】:

      • str_pad() 已在所有现有答案中提出。您关于e 修饰符的声明是有效的,但它应该是对@Lake 发布的答案的评论。
      • 我完全同意,但 Stack Overflow 不允许我对此发表评论,因为我的声誉得分太低。
      • 在 diEcho 的回答下阅读 cmets,OP 似乎有某种原因直接使用 str_pad 不符合他们的目的。 (我们无法评估该要求的有效性,因为 OP 没有在他们的帖子中发表评论,并且发表评论的答案已被删除。)为什么不更新您的答案以显示未弃用的解决方案,或许还能为评论特权赢得更多代表?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-12
      • 2011-01-14
      • 2013-08-03
      • 1970-01-01
      • 2014-06-19
      • 2015-07-05
      • 1970-01-01
      相关资源
      最近更新 更多