2012-05-23 115 views
0

我編寫了這段代碼來爲鏈接準備一個標題,但我認爲它有點笨重,想知道是否有更好的理解正則表達式的人可以減少下面的函數(合併相關的preg_replaces)。我需要它去掉所有當前的連字符,去掉多個空格,確保它除了替換空格之外都是字母數字,用一個連字符替換所有空格,並確保字符串不以連字符開頭:縮短此功能

function prepareURLTitle($title) 
{ 

return preg_replace("/\A-/", "", str_replace(" ", "-", preg_replace("/[^a-zA-Z0-9\s]/", "", preg_replace('/\s\s+/', ' ', preg_replace('/\s?-/', '', $title))))); 

} 

輸入的一個例子,它的輸出:

輸入:

BRAND NEW - 手套,2組//多空間在這裏,但可以將blockquote不會讓我顯示它們

輸出:

BRAND-NEW-手套-2-包

回答

-1
function prepareURLTitle($title) 
{ 
    return preg_replace("/[^a-zA-Z0-9]/", "-",str_replace("-", "", $title)); 
} 

DEMO:http://codepad.org/lPSQQBys

OUTPUT:

全新 - 手套 - 2包

+0

這將導致'BRAND NEW - 手套, 2包'成爲'全新 - 手套 - 2包' – kevlar1818

+0

@ kevlar1818我修好了(有點)。 – Neal

+0

只能用連字符替換所有非字母數字字符。特別是像「foo:bar」這樣的例子會變成「foo - bar」,而這應該變成「foo-bar」。 – Wormbo

3
trim(preg_replace('`[^a-z0-9]+`i','-',str_replace("'",'',$title)),'-') 

我也沒有用引號替換引號,所以像「貓的喵」這樣的字符串不會變成「貓咪的喵喵」。

2
function prepareURLTitle($title) 
{ 
    return preg_replace("[^A-Za-z0-9]+", "-", $title); 
} 

這應該起作用。您需要用一個「 - 」替代多個非字母數字字符。

1
preg_replace('~[^a-z\d]+~i','-',preg_replace('~^[^a-z\d]+(.*?)[^a-z\d]+$~i','$1',$title)); 
// or 
preg_replace(array('~^[^a-z\d]+(.*?)[^a-z\d]+$~i','~[^a-z\d]+~i'),array('$1','-'),$title); 

用一個例子...

$title = ' BRAND NEW - Gloves, 2 pack - '; 
echo preg_replace(array('~^[^a-z\d]+(.*?)[^a-z\d]+$~i','~[^a-z\d]+~i'),array('$1','-'),$title); 

將返回

嶄新的手套-2包