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_replacePHP 5.3.0 で非推奨になりました。

さて、あなたの質問に:\b単語の境界として使用できます。

簡単に言えば\b\bword\b.

詳しくはこちらのページをご覧ください。


preg_replacePHP のドキュメントの例 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 に答える