用 span 元素替换前导零

Replace leading zeros with a span element

我有这个字符串:000 003,一旦发表更多评论,它就会增加。 300 条评论后,该字符串将如下所示:000 303。 1000条评论后,001 303等。我使用 chunk_split() 在前 3 个前导零之后添加 space。

我想用 <span class="color-gray">the zeros here</span> 替换前导零,但我无法修复它。以下是函数目前的样子:

function format_id($string) {
    if($string < 10) {
        $test = chunk_split('00000'.$string, 3, ' ');

    } elseif($string > 10 AND $string < 100) {
        $test = chunk_split('0000'.$string, 3, ' ');

    } elseif($string > 100 AND $string < 1000) {
        $test = chunk_split('000'.$string, 3, ' ');

    } elseif($string > 1000 AND $string < 10000) {
        $test = chunk_split('00'.$string, 3, ' ');

    } elseif($string > 10000 AND $string < 100000) {
        $test = chunk_split('0'.$string, 3, ' ');

    } else {
        $test = chunk_split($string, 3, ' ');
    }

    return preg_replace('/^0/', '', $test);
}

format_id(35)returns00 003。我希望它在 HTML 中看起来像这样:<span class="color-gray-light">000 00</span>3。只有零(就像我说的)会在 span 元素内。

我该如何解决这个问题?

return preg_replace(
    '/^([\s0]+)/', 
    '<span class="color-gray-light"></span>', 
    $test
);

这会将零(和空格)包裹在您需要的范围内。

这应该可以解决问题:

function format_id($string) {
    return preg_replace('/^([\s0]+)/', '<span class="color-gray-light"></span>', $string);
}

这是一个不使用正则表达式的替代方法:

function format_str($number, $maxLen){
    $len     = strlen($number);
    $padding = $maxLen - $len;
    if($padding > 0){
        return "<span>".str_pad ('' , $padding, '0', STR_PAD_LEFT)."</span>".$number;
    }

    return $number;
}

看这里:https://3v4l.org/fJHXW

显然,这不处理浮点值。但我假设您只将它与整数一起使用。

输出:

echo format_str(1,6);
// <span>00000</span>1
echo format_str(10,6);
// <span>0000</span>10
echo format_str(152,6);
// <span>000</span>152
echo format_str(32152,6);
// <span>0</span>32152

我已经重新编写了您的函数,使其更简单、更灵活(我希望您的网站可以增长到超过 6 位数的内容!)。

Flosculus 有您问题的答案(我已将其包含在此函数中);这只是为了解决您的功能本身。

<?php
function format_id ($string, $zero_padding) {
    // Add the padding
    $string = str_pad($string, $zero_padding, '0', STR_PAD_LEFT);

    // Now split the string to have space every 3 chars
    $string = chunk_split($string, 3, ' ');

    // Finally, add the span. Credit goes to Flosculus' answer for this!
    return preg_replace(
        '/^([\s0]+)/', 
        '<span class="color-gray-light"></span>', 
        $string
    );
}

print format_id("3", 9);
?>