2014-03-13 117 views
0

這是一個新手問題。PHP:檢查一個字符串中是否存在特殊字符

比方說,我有非法字符數組,即:

$special_chars = array("?", "[", "]", "/", "\\", "=", "<", ">", ":", ";", ",", "'", "\"", "&", "$", "#", "*", "(", ")", "|", "~", "`", "!", "{", "}"); 

我需要檢查是否有這些字符出現在一個字符串,即

$my_string = "abcde!fgh" 

我用Google搜索爲解決方案以簡單的方式做到這一點,但沒有找到任何滿意的答案。

任何幫助,將不勝感激。

回答

4

一個簡潔的方式與你的兩個數據結構來做到這一點是:

count(array_intersect(str_split($my_string), $special_chars)) 

這也將告訴你多少的特殊字符是的字符串中。

您可以爲您的字符列表編寫一個循環,並使用strpos進行手動探測。

最不費力的就是將你的特殊字符列表轉換爲正則表達式charclass並對字符串進行測試。

0

如果你只是想匹配所有非單詞字符,preg_match_all可能是一個更好的解決方案。試一試。

preg_match_all('/[\W]{1}/',$my_string, $matches); 

的\ W匹配任何非單詞字符和{1}指定其中只有1抓住並退出,使用preg_match_all代替的preg_match得到匹配的正則表達式,而不只是第一個,所有的部分。

現在變量$ matches是一個包含所有非單詞字符的數組。 如果你想知道你多少可以做

$numSpecialCharacters = preg_match_all('/[\W]{1}/',$my_string); 

如果你不在乎多少,而只是要檢查它是否包含一個,你可以使用條件

if($numSpecialCharacters === false) 
    //something went wrong. 
elseif($numSpecialCharacters > 0) 
    //the string contains special characters 

你可以找到文件here。希望有幫助。

相關問題