preg_replace vs trim PHP

时间:2014-06-12 20:30:59

标签: php

我正在使用slug函数,我不完全了解其中一些,并且正在寻求解释方面的帮助。

我的第一个问题是关于我的slug函数中的这一行$string = preg_replace('# +#', '-', $string);现在我明白这会用' - '替换所有空格。我不明白的是#符号在#之间的空格之后是什么。

这导致了我的下一个问题。我想要一个修剪函数,它将删除空格,但只有空格后输入值。例如,某人偶然进入亚利桑那州"在a之后有两个空格,它破坏了与亚利桑那州相连的页面。

所以在我漫无目的之后,我基本上想弄清楚如何使用修剪来摆脱意外空间但仍然有preg_replace插入' - '在单词之间。

ex .." Sun City West" =" sun-city-west"

这是我的完整slu_函数 -

function getSlug($string){
if(isset($string) && $string <> ""){
    $string = strtolower($string);
    //var_dump($string); echo "<br>";
    $string = preg_replace('#[^\w ]+#', '', $string);
    //var_dump($string); echo "<br>";
    $string = preg_replace('# +#', '-', $string);
}
return $string;

}

2 个答案:

答案 0 :(得分:2)

你可以试试这个:

function getSlug($string) {
  return preg_replace('#\s+#', '-', trim($string));
}

首先修剪字符串开头和结尾的额外空格,然后用-字符替换所有其他空格。

这里你的正则表达式是:

#\s+#

是:

#  = regex delimiter
\s = any space character
+  = match the previous character or group one or more times
#  = regex delimiter again

所以这里的正则表达式意味着:&#34;匹配一个或多个空格字符的任何序列&#34;

答案 1 :(得分:2)

+表示至少一个前面的字符,因此它匹配一个或多个空格。 #符号是标记正则表达式模式块的开始和结束的方法之一。

对于trim函数,PHP方便地提供trim(),删除所有前导和尾随空格。