2013-11-27 117 views
-3

有了這個代碼,我可以從字符串在PHP中刪除所有特殊字符:逃生()%[]從字符串PHP

function noSpeCha($string) { 
    return preg_replace('/[^a-zA-Z0-9_ %\[\]\.\(\)%&-]/s', '', $string); 
    } 

但我需要將它刪除這些字符:

() % [ ] 

我不知道如何繼續。

+2

你從哪裏得到原來的正則表達式?你有沒有讀過任何正則表達式文檔? – zzzzBov

回答

3

[^n] is a regular expression pattern匹配字符的方括號之間不(在這種情況下,它會匹配不是n的字符)。

如果你想改變你現有的正則表達式匹配%()[],你需要從[^...]塊(與他們一起escape characters)將其刪除。

preg_replace('/[^a-zA-Z0-9_ %\[\]\.\(\)%&-]/s', '', $string); 
          ^^^^^ ^^^^^ 
它給你留下
preg_replace('/[^a-zA-Z0-9_ \.&-]/s', '', $string); 
收拾了一點東西給我們...
preg_replace('/[^a-z0-9_ .&-]/si', '', $string); 
+0

沒有必要在角色類中逃離一個點'.'。它將匹配一個字面點,它不會匹配所有內容。 – HamZa

+0

@HamZa,正確的,我只是使用此代碼來顯示需要更改必要的更改的正則表達式的更改。反斜槓字符也應該在字符串中使用。 – zzzzBov

0

從列表中刪除例外,這將只允許字母,數字,下劃線,破折號和空格:

function noSpeCha($string) { 
    return preg_replace('/[^a-zA-Z0-9_- ]/s', '', $string); 
}