2012-06-20 68 views
0

我需要過濾掉字母,數字,點,連字符,撇號或空格以外的字符串。PHP preg_match'不起作用

字母,數字,點,連字符和空格字符串通過測試,但是當它們包含撇號時,它會失敗。 (點和連字符上的轉義字符似乎沒有任何區別,所以我只是爲了確定它們)

對此有何看法?

if (preg_match("/[^a-zA-Z0-9\.\-\'\\s]/", $some_var)){ 
    echo "Invalid characters"; 
} 
+1

您不需要轉義任何這些字符。 '''可以簡單地移到課程的開始/結束處。 – ThiefMaster

+0

\\ s不正確 –

回答

1

你的回答不編譯由於某些字符轉義(轉義爲一個字符串,前傳入的preg_match功能的一部分)。

你可以嘗試雙轉義:

if (preg_match("/[^a-zA-Z0-9\\.\\-\\'\s]/", $some_var)){ 
    echo "Invalid characters"; 
} 

但逃脫點,連字符和撇號是不需要的,所以您可以簡化:

if (preg_match("/[^a-zA-Z0-9.'\s-]/", $some_var)){ 
    echo "Invalid characters"; 
} 

注意,連字符被移動到最後,所以它不會被誤認爲一個字符範圍。就我個人而言,我寧願逃避它以防止其他開發人員意外地將新字符添加到列表的末尾並導致意外的行爲。

這樣:

if (preg_match("/[^a-zA-Z0-9.\\-'\s]/", $some_var)){ 
    echo "Invalid characters"; 
} 

最後,你可能要檢查你的輸入($some_var變量) - 這實際上包含反斜槓作爲PHP有​​時會在(例如,用戶類型添加此「不能「,但會通過」無法「發送 - 您可能需要先登錄stripslashes)。

例如,

if (preg_match("/[^a-zA-Z0-9.\\-'\s]/", stripslashes($some_var))){ 
    echo "Invalid characters"; 
} 
+0

這確實是由於斜槓。 –

0

試試這個:

if (preg_match("/[^a-zA-Z0-9.'\s-]/", $some_var)){ 
     echo "Invalid characters"; 
} 
+0

仍然相同:/ –

+3

*「試試這個:」*是[subpar answer decoration](http://stuck.include-once.org/#help10)。相反,請給你的代碼做些什麼,爲什麼要推薦它,或者你如何得出結論。 – mario