2012-03-15 28 views

回答

3

這個假設,任何東西但「字符」被視爲一次性。

$patterns = array(
    '/&/'    => 'and', // Ampersand to "and" 
    '/[^[:alpha:]]+/' => '_'  // Anything *but* a character to underscore 
); 

$result = preg_replace(array_keys($patterns), array_values($patterns), $input); 

最後圖案根據當前區域(並因此包括空格)取代的「無字」字符的一個或多個出現次數的組。


側面說明(可能是無關緊要的):如果腳本上運行的服務器具有en_US的區域,會出現如下替換:

$input = 'app!le___s &! orän=%ges'; 
$result = 'app_le_s_and_or_n_ges'; 

如果區域設置爲de_DE,這將結果:

$result = 'app_le_s_and_orän_ges'; 

由於ä[[:alpha:]]部分在此特定LO卡爾。解決這個問題的顯而易見的解決方案是將字符類替換爲[a-zA-Z]

+0

這很有用。你能告訴我如何保留最後一個點「。」。在字符串中,如果有的話,假設像擴展名的文件名。 – 2012-03-15 19:39:51

2

這應該這樣做:

$myvariable = str_replace('&','and',$myvariable) 
$myvariable = preg_replace ('/[^a-z]+/i', '_' , $myvariable) 

見:http://php.net/manual/de/function.preg-replace.php

的方括號內插入符號(^)意味着尋找一切,是不是在括號內聲明。所以每個特殊字符都不是「a-z」。正信號表示多個事件應該匹配。劃定斜線後面的'i'表示進行不區分大小寫的搜索。

+0

+1首先使用'str_replace()' – 2012-03-15 19:10:10

相關問題