2011-12-13 138 views
12

我想,以取代所有非字母和數字字符即/&%#$等帶有下劃線(_)與「」空白(所以沒有下劃線)替換所有'(單引號)。PHP的preg_replace特殊字符

所以「世上本沒有任何」(忽略雙引號)將成爲「There_wouldnt_be_any」。

我在reg表達式中無用,因此我的帖子。

乾杯

回答

26
$newstr = preg_replace('/[^a-zA-Z0-9\']/', '_', "There wouldn't be any"); 
$newstr = str_replace("'", '', $newstr); 

我把他們兩個單獨的行,使代碼更清晰。

注意:如果您需要Unicode支持,請參閱下面的Filip答案。它將匹配除了A-z之外的所有以字母形式註冊的字符。

2

兩個步驟做到這一點:

  1. this正則表達式替換不是字母字符:

    [\"\']

  2. [\/\&%#\$]

  3. this正則表達式替換報價

,並使用preg_replace

$stringWithoutNonLetterCharacters = preg_replace("/[\/\&%#\$]/", "_", $yourString); 
$stringWithQuotesReplacedWithSpaces = preg_replace("/[\"\']/", " ", $stringWithoutNonLetterCharacters); 
28

如果你寫 「非字母和數字」 排除超過[A-Za-z0-9](即。考慮像åäö這樣的字母是要致信),並希望能夠準確處理UTF-8字符串\p{L}\p{N}將是有幫助的。

  1. \p{N}將匹配任何 「
  2. \p{L}將匹配任何 「字母字符,」,其中包括
    • 小寫字母
    • 修飾字母
    • 其他信
    • 標題案件號碼
    • 大寫字母

文檔PHP: Unicode Character Properties


$data = "Thäre!wouldn't%bé#äny"; 

$new_data = str_replace ("'", "", $data); 
$new_data = preg_replace ('/[^\p{L}\p{N}]/u', '_', $new_data); 

var_dump (
    $new_data 
); 

輸出

string(23) "Thäre_wouldnt_bé_äny" 
+0

在我的情況ßällistic被上傳後換成ßällistic。 – erdomester

+0

@erdomester是否支持UTF-8編譯了PCRE(正則表達式引擎)的版本? –

+0

我不知道我理解你。該文件使用UTF-8編碼,不含BOM。我正在使用FileZilla – erdomester