创建坏词过滤器

时间:2014-01-05 17:24:28

标签: php

嗨,请帮助我,我正在使用此代码来过滤一些单词,但问题是它与确切的单词不匹配,而只是阻止包含我单词中字母的单词。

例如:“。com”我输入指挥官,这个词被阻止请帮忙。

$badwords = explode('|', 'http|www|.com');
    foreach($badwords as $badword)
    {

        if(preg_match("/$badword/", $post->data['message'], $match))
        {

            $post->errors['badwords']['error_code'] = "Warning message goes here";

        }
    }

2 个答案:

答案 0 :(得分:0)

您想要的行可能是

preg_match("/\b$badword\b/i", $post->data['message'], $match))

\b表示不能用于形成单词的字母(请参阅here)。这可以防止comcommanderdatacom匹配。最后的i使搜索不区分大小写。

此外,请注意,使用.com作为您的一个坏词可能无法达到您想要的效果。句点字符(.)与正则表达式中的任何单个字符匹配。相反,您想要搜索(\.),这将实际匹配期间。 (有关时期特征的详细信息,请参阅here。)

最后,如果您要尝试匹配网址,可以查看this question

答案 1 :(得分:0)

对于单词(我的意思是单词而不是.com等),这很简单

你只是想要pregmatch

'/\b' . $badword . '\b/'

\ b是单词边界

完全停止你必须逃脱它们。字面意思是它们(没有\它们实际上是正则表达式和正则表达式中的字符)所以我要么编写一个查找句号的函数,然后在它们之前添加一个\或者直接将它们添加到列表中,并且已经附加了\。 / p>