2014-06-12 43 views
0

我正在使用一個slug函數,我沒有完全理解它,並正在尋求一些解釋幫助。preg_replace vs trim PHP

我的第一個問題是關於這條線在我的slug函數$string = preg_replace('# +#', '-', $string);現在我明白,這用「 - 」替換所有空格。我不明白的是,在#號之間的空格後面出現了+符號。

這導致我的下一個問題。我想要一個修剪功能,它將擺脫空格,但只有空格輸入值後。例如,某人偶然在a後出現了兩個空格的「亞利桑那」,並摧毀了與亞利桑那州有關的頁面。

因此,在我散漫之後,我基本上想弄清楚如何使用修剪來擺脫意外空間,但仍然在單詞之間插入preg_replace插入「 - 」。

恩...... 「太陽城西」= 「陽光城 - 西」

這是我的全部功能 - 塞

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

你可以試試這個:

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 

所以這裏的正則表達式的意思是: 「匹配一個或多個空白字符的任意序列」

+0

謝謝你的解釋! – user3436399

+0

不客氣:)如果我的答案幫助你免費升級和/或接受它! –

2

+手段至少有一個前面的字符,所以它匹配一個或多個空格。 #符號是標記正則表達式模式塊的開始和結束的方法之一。

對於修剪功能,PHP提供的trim()可以刪除所有前導和尾隨的空白。

+0

謝謝你解釋一切! – user3436399