我有一堆禁止的单词,想要检查字符串A是否包含任何这些单词。
例如:
$banned_words = "dog cat horse bird mouse monkey blah blah2 blah3 "; //etc
$string_A = "The quick brown fox jumped over the lazy dog";
如何有效地检查字符串中的任何单词是否与禁用单词列表中的任何单词匹配?
答案 0 :(得分:4)
if (preg_match('~\b(' . str_replace(' ', '|', $banned_words) . ')\b~', $string_A)) {
// there is banned word in a string
}
答案 1 :(得分:1)
如果$banned_w
是一个数组会不会更好?
然后您可以explode()
要检查禁止字词的字符串,然后对于每个爆炸片段使用in_array()
来检查它是否是禁止的字词。
编辑: 您可以使用:similar_text进行比较,如果有人修改了坏词。
答案 2 :(得分:0)
创建一系列禁止的单词,然后对该数组使用str_replace
会更加容易:
$banned_words = array('dog', 'cat', 'horse', 'bird', 'mouse', 'monkey', 'blah', 'blah2', 'blah3');
$string_A = "The quick brown fox jumped over the lazy dog";
echo str_replace($banned_words, "***", $string_A);
将输出:The quick brown fox jumped over the lazy ***
答案 3 :(得分:0)
我刚开发了一个可以过滤掉坏词的函数:
function hate_bad($str)
{
$bad=array("shit","ass");
$piece=explode(" ",$str);
for($i=0;$i < sizeof($bad); $i++)
{
for($j=0;$j<sizeof($piece);$j++)
{
if($bad[$i]==$piece[$j])
{
$piece[$j]=" ***** ";
}
}
}
return $piece;
}
并将其称为:
$str=$_REQUEST['bad'];// here bad is the name of tex field<br/><br/>
$good=hate_bad($str); <br/>
if(isset($_REQUEST['filter']))// 'filter' name of button
{
for($i=0;$i<sizeof($good);$i++)
{<br/>
echo $good[$i];
}
}
答案 4 :(得分:0)
您可以使用str_ireplace来检查错误的单词或短语。这可以在单行的PHP代码中完成,而不需要嵌套循环或正则表达式,如下所示:
$banstring = ($string != str_ireplace($badwords,"XX",$string))? true: false;
这种方法具有不区分大小写的额外好处。要查看此操作,您可以按如下方式实施检查:
$string = "The quick brown fox jumped over the lazy dog";
$badwords = array('dog','cat','horse','bird','mouse','monkey');
$banstring = ($string != str_ireplace($badwords,"XX",$string))? true: false;
if ($banstring) {
echo 'Bad words found';
} else {
echo 'No bad words in the string';
}
如果坏词列表是字符串而不是数组(如问题中所示),则字符串可以转换为数组,如下所示:
$banned_words = "dog cat horse bird mouse monkey"; //etc
$badwords = explode(" ", $banned_words);
答案 5 :(得分:0)
$badwords = array('dog','cat','horse','bird','mouse','monkey');
$content= "The quick brown fox jumped over the lazy dog";
$content = str_replace($badwords, 'has_badwords' $content);
if (strpos($content, 'has_badwords') !== false) {
echo 'true';
}