2012-08-09 36 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