是否规范字符串中的空格


Normalize spaces in a string?

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

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

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

我试过

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

我还尝试过php用单个空间替换多个空间,但也不起作用。

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

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

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

使用正则表达式

$text = preg_replace("~''s{2,}~", " ", $text);

's方法也去掉了换行符,而/ {2,}/方法忽略了换行符后行开头的制表符和空格。

如果你想保存换行符并获得更准确的结果,我建议你对类似的问题给出这个令人印象深刻的答案,并对之前的答案进行改进。根据他们的笔记,你的问题的答案是:

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

简而言之,这是在利用双重否定。阅读链接以获得对该技巧的深入解释。