3 回答
TA贡献1831条经验 获得超4个赞
你可以用preg_replace这个正则表达式来实现你想要的:
\s+(?=(\d\s*){0,3}$)
它在它和行尾之间寻找一个空格,后跟 0 到 3 位数字(带有可选的空格)(使用正向前瞻)。只需用空字符串 ( '')替换这些空格:
$text = preg_replace('/\s+(?=(\d\s*){0,3}$)/', '', '12895 6 7 8 9');
echo "$text\n";
$text = preg_replace('/\s+(?=(\d\s*){0,3}$)/', '', '2546734 34 55');
echo "$text\n";
$text = preg_replace('/\s+(?=(\d\s*){0,3}$)/', '', '2334734556 341 5');
echo "$text\n";
$text = preg_replace('/\s+(?=(\d\s*){0,3}$)/', '', '23347345563 4 1 5');
echo "$text\n";
输出:
12895 6789
2546734 3455
2334734556 3415
23347345563415
TA贡献1797条经验 获得超6个赞
function func($text, $digits = 4){
$str = '';
for ($i = strlen($text)-1; $i >= 0; $i--){
if(strlen($str) < $digits && !is_numeric($text[$i]))continue;
$str .= $text[$i];
}
return strrev($str);
}
$text1 = '12895 6 7 8 9';
$text2 = '2546734 34 55';
$text3 = '2334734556 341 5';
echo func($text1, 4); //12895 6789
echo func($text2, 4); //2546734 3455
echo func($text3, 4); //2334734556 3415
TA贡献1804条经验 获得超7个赞
如果您正在寻找使用正则表达式的东西,请查看下面的示例。它使用匹配来获取字符串的不同部分,然后以正确的格式将其连接回。
$strings = [
'12895 6 7 8 9',
'2546734 34 55',
'2334734556 341 5',
];
function formatNumber($number)
{
preg_match('/(\d+) ?((?:[\d]\s*){4})$/', $number, $matches);
if (!$matches) {
return $number;
}
return sprintf('%s %s', $matches[1], str_replace(' ', '', $matches[2]));
}
var_dump(array_map('formatNumber', $strings));
输出:
array(3) {
[0] =>
string(10) "12895 6789"
[1] =>
string(12) "2546734 3455"
[2] =>
string(15) "2334734556 3415"
}
- 3 回答
- 0 关注
- 147 浏览
添加回答
举报