用 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;
}
显然,这不处理浮点值。但我假设您只将它与整数一起使用。
输出:
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);
?>
我有这个字符串: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;
}
显然,这不处理浮点值。但我假设您只将它与整数一起使用。
输出:
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);
?>