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

我想用带有 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)


绝地无双
浏览 140回答 3
3回答

慕勒3428872

\G为了胜利!https://www.regular-expressions.info/continue.html\G将匹配字符串的开头并继续匹配,直到无法匹配为止。从字符串的开头匹配一个零,然后一次一个地匹配后面的每个零。将每个匹配的零替换为空格。代码:(演示)$pin = '0010'; var_export(preg_replace('~\G0~', ' ', $pin));输出:'  10'

Helenr

我不知道如何使用正则表达式更轻松地做到这一点,但是您可以使用以下方法使其他代码更加简洁str_repeat:$pin = '0010';$temp = ltrim($pin, '0');$spaces = strlen($pin) - strlen($temp);$new_pin = str_repeat(' ', $spaces) . $temp;echo $new_pin;

Qyouu

你说:但如果可能的话我正在寻找更有效的东西首先,请注意单行不一定有效(正如您尝试的 preg_replace() 一样,正则表达式实际上有点慢,因为它首先被编译)。其次,您可以更好地采用对字符串进行两次传递的方法。这也可以就地编辑字符串,而无需额外的字符串变量,这在您的情况下是理想的。片段:<?php$str = '000010';$len = strlen($str);for($i = 0; $i < $len; ++$i){&nbsp; &nbsp; if($str[$i] == '0'){&nbsp; &nbsp; &nbsp; &nbsp; $str[$i] = ' ';&nbsp; &nbsp; }else{&nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; }}echo $str;
打开App,查看更多内容
随时随地看视频慕课网APP