preg_replace无法删除字符串中的空格

时间:2020-02-22 19:38:18

标签: php

我的字符串是“ 1049”

不可能删除并获得1049,我在做什么错?

$distance // "1 049"
$distance = $str = preg_replace('/\s\s+/', ' ', $distance);

$distance // "1 049"

更新

我从Google Distance API获得了一个json结果,这两个str_replace可以工作,但是我尝试在末尾进行preg_replace以获得1049而不是“ 1 049”

   $response = \GoogleMaps::load('directions')
        ->setParam([
            'origin'          => $origin,
            'destination'     => $destination,
            'mode' => 'driving' ,
            'language' => 'fr',

        ])->get();

    $parsed_json = (json_decode($response));

    if($parsed_json->status != "NOT_FOUND") {
        $result = $parsed_json->{'routes'}[0]->{'legs'}[0]->{'distance'}->{'text'};
        $a = $result;
        $b = str_replace(" km",'',$a);
        $distance = str_replace(",",'.',$b);
        $distance = preg_replace('/\s+/', '', $distance);
    }

var_dump($distance) // "1 049"

2 个答案:

答案 0 :(得分:3)

两个问题:

  1. 您要匹配“一个空格” \s,后跟“一个或多个空格” \s+,这意味着至少两个空格在一起。
  2. 您的替换文本仍然是空格,而不是空字符串。

您正在寻找这个:

var_dump(preg_replace('/\s+/', '', '1 049'));

但是,也可以使用str_replace()更简单地完成此操作:

var_dump(str_replace(' ', '', '1 049'));

编辑

根据您对原始问题的更新以及您庆幸地将值复制并粘贴到your comment的事实,我发现您要摆脱的内容实际上不是空格,而是字符不同其中ord()个数字是226。我能找到的所有代码页都说它是âô,但奇怪的是,仅显示了这些代码,而没有显示您的字符。也许其他人可以解释它实际上是哪个字符。

请参见3v4l.org snippet(我无法通过stackoverflow显示字符):

enter image description here

话虽如此,您有两种选择:

1)您可以替换该特殊字符并将其删除:

// note that SO shows it as whitespace but your mystery character is in there!
var_dump(str_replace(' ', '', '1 049'));

2)或者,也许是更好的方法,因为您基本上只想要数字,所以可以保存前面的步骤,而不是

$a = $result;
$b = str_replace(" km",'',$a);
$distance = str_replace(",",'.',$b);
$distance = preg_replace('/\s+/', '', $distance);

您只需一步就可以补充所有尚未消失的东西:

$distance = preg_replace('/[^0-9]+/', '', $result);

答案 1 :(得分:-1)

说您的字符串是:

cash = '1 049'

您所要做的就是

cash.replace(' ', '')

将删除所有空格。 希望对您有帮助

相关问题