2014-02-12 57 views
0

我有這個函數來檢查我的字符串中的禁止詞。但是,如果空格被刪除,我無法檢測到被禁止的單詞 - 導致該函數無用。有人可以幫助我改進它來檢測無空格的單詞。PHP函數檢查被禁止的詞

$string = "Hellomynameisuser."; 
check_for_banned_words($string); 

function check_for_banned_words($string){ 
    $badWords = array(
     "ban", 
     "bad", 
     "user", 
     "pass", 
     "stack", 
     "name", 
     "html" 
    ); 
    $matches = array(); 
    $matchFound = preg_match_all(
     "/\b(" . implode($badWords,"|") . ")\b/i", 
     $string, 
     $matches 
    ); 
    if($matchFound): 
     $words = array_unique($matches[0]); 
     echo("<ul>"); 
     foreach($words as $word): 
      echo("<li>" . $word . "</li>"); 
     endforeach; 
     echo("</ul>"); 
    endif; 
} 
+3

[clbuttic(http://www.codinghorror.com/blog/2008/10/obscenity-filters-bad-idea-or-incredibly-intercoursing-bad-idea.html)的問題! – DanFromGermany

+1

但是,如果你這樣做,你也會禁止諸如「香蕉」和「即」這樣的詞。那是你要的嗎? – Jon

+1

@DanFromGermany或者我們曾經說過的* Scunthorpe *問題,我曾在早期使用真正糟糕的褻瀆語言過濾器;) – CD001

回答

1

\b檢測字邊界,刪除它們以獲得常規匹配。

"/(" . implode($badWords,"|") . ")/i", 
+0

完美,謝謝! – drewdyer