2012-08-09 35 views
0

我有一個檢查不良字詞的函數,但它不能工作,我想要它。例如,測試是一個粗俗的詞,那麼如果我說「測試」這個函數會把它算作一個粗俗的詞。我將如何解決這個問題,以便它不這樣做。檢測字符串內的禁止字詞

這裏是我的代碼:

function censor($message) { 
     $badwords = $this->censor; //array with the cuss words. 
     $message = @ereg_replace('[^A-Za-z0-9 ]','',strtolower(' '.$message.' ')); 
     foreach($badwords as $bad) { 
      $bad = trim($bad); 
      if(strpos($message.' ', $bad.' ')!==false) { 
       if(strlen($bad)>=2) { 
        return true; 
       } 
      } 
     } 
    } 
+0

使用\ b在正則表達式(在開始和結束)。它匹配單詞邊界。 – HappyTimeGopher 2012-08-09 22:41:32

+0

'ereg_'函數由於某種原因而被棄用。用@代替通知不會讓它變得更好。切換到'preg_'功能。 – kapa 2012-08-09 22:42:01

+0

@HappyTimeGopher我在哪裏添加? – user1588878 2012-08-09 22:43:46

回答

2

首先,ereg_replace已被棄用的PHP 5.3.0的。

現在,對於您的問題:您可以使用\b作爲單詞邊界。

簡單地說:\b允許用戶執行「全字」一個使用 在\bword\b形式正則表達式搜索。

查看this page瞭解更多詳情。


你甚至可以使用類似下面,我複製了例2 PHP的preg_replace文件的代碼:

$string = 'The quickest brown fox jumped over the lazy dog.'; 
$patterns = array(); 
$patterns[0] = '/ quick /'; 
$patterns[1] = '/ brown /'; 
$patterns[2] = '/ fox /'; 

echo preg_replace($patterns, ' *** ', $string); 

Output: The quickest *** *** jumped over the lazy dog. 
+0

你可以告訴我,我補充說什麼? – user1588878 2012-08-09 22:45:25