簡體   English   中英

PHP 用相同數量的空格替換前導零

[英]PHP Replace Leading Zeros with Same Number of Spaces

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

\G為勝利!

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

\G將匹配字符串的開頭並繼續匹配,直到無法匹配為止。

正則表達式中的“\ G”錨點有什么用?

從字符串的開頭匹配一個零,然后一次匹配后面的每個零。 用空格替換每個匹配的零。

代碼:(演示

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

Output:

'  10'

我看不出如何使用正則表達式更容易做到這一點,但您可以使用str_repeat使您的其他代碼更簡潔:

$pin = '0010';
$temp = ltrim($pin, '0');
$spaces = strlen($pin) - strlen($temp);
$new_pin = str_repeat(' ', $spaces) . $temp;
echo $new_pin;

你說:

但如果可能的話,我正在尋找更有效的東西

  • 首先,請注意,單線不一定有效(正如您嘗試使用 preg_replace() 和正則表達式實際上有點慢,因為它首先被編譯)。
  • 其次,您可以更好地采用通過字符串的 2 遍方法。 這也可以在沒有額外字符串變量的情況下就地編輯字符串,這在您的情況下是理想的。

片段:

<?php

$str = '000010';
$len = strlen($str);

for($i = 0; $i < $len; ++$i){
    if($str[$i] == '0'){
        $str[$i] = ' ';
    }else{
        break;
    }
}

echo $str;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM