繁体   English   中英

preg_replace最后4位数之间的空格

[英]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

在3v4l.org上演示

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM