[英]preg_replace spaces between the last 4 digits
我知道如何从字符串中删除空格:
$text = preg_replace('/\\s+/', '', $text);
但是,如果我只需要在任意数字的4个最后数字之间删除空格怎么办?
举个例子:
12895 6 7 8 9
- 我希望它成为12895 6789
要么
2546734 34 55
- 我希望它成为2546734 3455
要么
2334734556 341 5
- 我希望它成为2334734556 3415
我怎么做?
**更新:我想删除最后四位数之间的空格,而不是在第一个空格之后(因为所有示例都显示空格)。 所以这样的事情会是一个更好的例子:
23347345563 4 1 5
- 我希望它成为23347345563415
你可以使用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
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
如果您正在寻找使用正则表达式的东西,请查看下面的示例。 它使用匹配来获取字符串的不同部分,然后以正确的格式将其连接回来。
$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"
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.