我有这个字符串: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
元素内。
我该如何解决这个问题?
答案 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);
}