我正在使用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;
}
答案 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()
,删除所有前导和尾随空格。