Достаточно часто во всяческих цензорах и т.п. требуется искать совпадения по массиву слов.
В поисках решения нашел такой вариант, понравился неординарностью решения, очень шустрый и регистронезависимый, но с ограничением на сами слова, нельзя использовать то, что не может быть индексом массива.
Код:
$GLOBALS['bad_words']= array('truck' => true, 'shot' => true);
function containsBadWord($str){
$str= trim($str);
$str= preg_replace('/\s+/', ' ', $str);
$word_list= explode(" ", $str);
foreach($word_list as $word){
if( isset($GLOBALS['bad_words'][$word]) ){
return true;
}
}
return false;
}
$string = "This dude is a motherTrucker";
if ( !containsBadWord($string) ){
echo 'BAD';
}
else{
echo 'NOT BAD';
}