0

我有一个检查坏词的功能,但它不能按我想要的方式工作。例如 test 是一个 cuss 词,那么如果我说“testing”该函数会将其视为一个 cuss 词。我将如何解决这个问题,使其不会那样做。

这是我的代码:

    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;
                }
            }
        }
    }
4

1 回答 1

2

首先,ereg_replace自 PHP 5.3.0 起已弃用。

现在,对于您的问题:您可以\b用作单词边界。

简单地说:\b允许您使用\bword\b.

有关详细信息,请参阅此页面。


您甚至可以使用我从 PHPpreg_replace文档的示例 2 中复制的以下代码:

$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.
于 2012-08-09T22:44:04.163 回答