用span元素替换前导零

时间:2017-07-12 15:31:32

标签: php preg-replace chunks

我有这个字符串:nlmsghdr,一旦发布更多评论就会增加。在300条评论之后,此字符串将如下所示:000 003。在1 000条评论之后,000 303等等。我使用001 303在前3个前导零之后添加空格。

我想用chunk_split()替换前导零,但我无法修复它。以下是该功能目前的样子:

<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/', '$1', $test); } 返回format_id(35)。我希望它在HTML中看起来像这样:00 003。只有零(就像我说的那样)将在<span class="color-gray-light">000 00</span>3元素内。

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:2)

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

这将在你需要的范围内包含零(和空格)。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

我重新编写了您的功能,使其更简单,更灵活(我希望您的网站可以增长到超过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">$1</span>', 
        $string
    );
}

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

答案 3 :(得分:0)

这应该可以解决问题:

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