2016-01-19 23 views
-2

這的preg_replace使URL與 - 例如從字符串示例文本在這裏:網址塞,但到底要不要

http://example.com/example-text-here 

但如果字符串有一個類似的例子(文本)是(在這裏)它一決高下,如:

http://example.com/example-text-here- 

    $url = preg_replace("![^a-z0-9]+!i", "-", strtolower(htmlspecialchars(@$_POST["name"]))); 

末,我不知道有沒有 -

+2

'修剪($網址, ' - ')的開頭和結尾'? –

+0

或'$ url = preg_replace_callback(「/([^ a-z0-9] +)$ | [^ a-z0-9] +/i」,function($ m){return isset($ m [1] )?「」:「 - 」;},$ str);' –

+0

@Robbit Averill是否可以在最後或中心刪除? –

回答

1

您可以使用捕獲組的值之一左右,並使用交替組。然後,檢查組preg_replace_callback回調中:

$url = preg_replace_callback("/([^a-z0-9]+)$|[^a-z0-9]+/i", function ($m) { 
      return isset($m[1]) ? "" : "-"; 
     }, $str); 

IDEONE demo

正則表達式的解釋

  • ([^a-z0-9]+)$ - 第1組除letter 1個或多個字符和數字高達匹配字符串結尾
  • | - 或...
  • [^a-z0-9]+ - 除letter 1個或多個字符和數字

隨着isset我們檢查,如果第一組匹配,如果是,我們什麼也沒有更換,否則,與-取代。

但是,也許Robbie's suggestion使用第二步$url = trim($url, '-')更具可讀性。見trim help

地帶的空白(或其它字符)從字符串

相關問題