繁体   English   中英

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

[英]preg_replace impossible to delete the space inside string

我的字符串是“1 049”

无法删除到空间并获得 1049,我做错了什么?

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

$distance // "1 049"

更新

我从谷歌距离 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"

两个问题:

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

您正在寻找这个:

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

然而,这也可以通过 str_replace() 更简单地完成:

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

编辑

根据您对原始问题的更新以及您幸运地将值复制并粘贴到您的评论中这一事实,我可以发现您试图摆脱的实际上不是空白,而是一个不同的字符,其中ord()数字是226 我能找到的所有代码页都说它是一个â或一个ô但奇怪的是那些只是显示,而你的角色不是。 也许其他人可以解释它实际上是哪个角色。

请参阅3v4l.org 片段(我无法让 stackoverflow 显示角色):

在此处输入图像描述

话虽这么说,你有两个选择:

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);

说你的字符串是:

cash = '1 049'

你所要做的就是

cash.replace(' ', '')

这将删除所有空格。 我希望这有帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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