1

我需要规范化字符串中的空格:

  1. 删除多个相邻空格
  2. 删除字符串开头和结尾的空格

例如" my name is "=>my name is

我试过了

str_replace('  ',' ',$str);

我还尝试了 php 用一个空格替换多个空格,但这也没有用。

4

3 回答 3

14

用一个空格替换任何出现的 2 个或更多空格,并修剪:

$str = preg_replace('/ {2,}/', ' ', trim($input));

注意:在\s这里使用空白字符类是一个相当糟糕的主意,因为它会匹配换行符和您可能不期望的其他空白。

于 2013-02-25T16:22:08.790 回答
0

使用正则表达式

$text = preg_replace("~\\s{2,}~", " ", $text);
于 2013-02-25T16:22:39.503 回答
0

\s方法也去除了换行符,并且/ {2,}/方法在换行符之后忽略了行首的制表符和空格。

如果您想保存换行符并获得更准确的结果,我建议对类似问题提出这个令人印象深刻的答案,以及对先前答案的改进。根据他们的说明,您的问题的答案是:

$norm_str = preg_replace('/[^\S\r\n]+/', ' ', trim($str));

简而言之,这是利用双重否定。阅读链接以深入了解该技巧。

于 2017-03-03T10:41:13.533 回答