2013-03-11 92 views
0

我的頭銜包括空間,[{} &()大寫字母和其他一些未知的人物,我想更換隻降低字符。 我使用這一點,但我不能預測哪些用戶會給輸入我正在考慮某種形式的正則表達式或浸漬料更換或浸漬匹配,這樣有下劃線(空間)只有更低字母是可以接受或標題轉換爲小寫與underscore.i不希望其他任何字符一樣,{[]}()&等取代一切以較低的信

我都試過,但會選擇一條線路預浸更換或正則表達式

 $name = str_replace(' ', '_', $cityu); 
    $name1 = str_replace('(', '_', $name); 
    $name2 = str_replace(')', '_', $name1); 
+1

的樂趣:http://php.net/strtolower :)這將不低於A-Z – 2013-03-11 17:23:38

+0

@Allendar什麼特殊字符弄亂其他字符??????? – wayenjoy 2013-03-11 17:24:21

+0

它只會遵從ISO拉丁語排版並將其替換爲小寫版本(如果它當然存在的話)。我已閱讀了php.net上的文檔頁面,一些特殊的語言字母,如波蘭語和斯堪的納維亞語可能會失敗。你真的需要對這些角色進行一些測試並做出例外。也許現在已經有一種API用於這種類型的場合,但遺憾的是我不知道100%的準確性。 – 2013-03-11 17:25:06

回答

5

我想你可以使用像這樣的:

$string = preg_replace('/[^\w]/','_', $string); 
$string = strtolower($string); 
0

對於preg_replace()要使用這括在方括號[]一個字符類,如:

$output = preg_replace('/[() ]/', '_', $input); 

但是,如果你想更換所有非字母字符,那麼你可以使用:

$output = preg_replace('/[^a-z0-9]/', '_', $input); 

^字符類中的意思是「不」,所以它替換不是從A到Z或0到9

最後,你可以轉換到與strtolower()簡單小寫字符,所以你的代碼看起來像:

$output = preg_replace('/[^a-z0-9]/', '_', strtolower($input)); 

您可能還需要凝聚多____成一個_,它可以這樣做:

$output = preg_replace('/_{2,}/', '_', $input); 

{2,}指示要匹配的兩個或多個正好_角色。

+0

有人要離開與downvote評論? – Sammitch 2013-03-11 17:31:15