为了账号安全,请及时绑定邮箱和手机立即绑定

PHP 用相同数量的空格替换前导零

PHP 用相同数量的空格替换前导零

PHP
绝地无双 2023-07-01 15:25:46
我想用带有 3 个空格的“1”替换像 0001 这样的字符串。我尝试过 str_replace 但在 0010 上不起作用。我尝试过一些 preg_replace 但无法获得替换权来替换相同的数字我已经写了这个基本的东西并且它有效,但是如果可能的话我正在寻找更有效的东西。$pin = '0010';$temp = ltrim($pin, '0');$spaces = strlen($pin) - strlen($temp);for ($x=1;$x<=$spaces;$x++) $temp = ' '.$temp;echo $temp;我最接近的 preg_replace 是这样的,但我不知道如何替换:preg_replace('/0+/', ' ', $pin)
查看完整描述

3 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

\G为了胜利!

https://www.regular-expressions.info/continue.html

\G将匹配字符串的开头并继续匹配,直到无法匹配为止。

从字符串的开头匹配一个零,然后一次一个地匹配后面的每个零。将每个匹配的零替换为空格。

代码:(演示

$pin = '0010';
var_export(preg_replace('~\G0~', ' ', $pin));

输出:

'  10'


查看完整回答
反对 回复 2023-07-01
?
Helenr

TA贡献1780条经验 获得超3个赞

我不知道如何使用正则表达式更轻松地做到这一点,但是您可以使用以下方法使其他代码更加简洁str_repeat:


$pin = '0010';

$temp = ltrim($pin, '0');

$spaces = strlen($pin) - strlen($temp);

$new_pin = str_repeat(' ', $spaces) . $temp;

echo $new_pin;


查看完整回答
反对 回复 2023-07-01
?
Qyouu

TA贡献1786条经验 获得超11个赞

你说:

但如果可能的话我正在寻找更有效的东西

  • 首先,请注意单行不一定有效(正如您尝试的 preg_replace() 一样,正则表达式实际上有点慢,因为它首先被编译)。

  • 其次,您可以更好地采用对字符串进行两次传递的方法这也可以就地编辑字符串,而无需额外的字符串变量,这在您的情况下是理想的。

片段:

<?php


$str = '000010';

$len = strlen($str);


for($i = 0; $i < $len; ++$i){

    if($str[$i] == '0'){

        $str[$i] = ' ';

    }else{

        break;

    }

}


echo $str;




查看完整回答
反对 回复 2023-07-01
  • 3 回答
  • 0 关注
  • 104 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信