Элементы массива preg_match в строке?

Допустим, у меня есть множество плохих слов:

$badwords = array("one", "two", "three"); 

И случайная строка:

 $string = "some variable text"; 

Как создать этот цикл:

 if (one or more items from the $badwords array is found in $string) echo "sorry bad word found"; else echo "string contains no bad words"; 

Пример:
если $string = "one fine day" or "one fine day two of us did something" , пользователь должен увидеть сообщение о жалком слове.
Если $string = "fine day" , пользователь должен видеть, что строка не содержит сообщения о плохих словах.

Как я знаю, вы не можете preg_match из массива. Какие-нибудь советы?

Как насчет этого:

 $badWords = array('one', 'two', 'three'); $stringToCheck = 'some stringy thing'; // $stringToCheck = 'one stringy thing'; $noBadWordsFound = true; foreach ($badWords as $badWord) { if (preg_match("/\b$badWord\b/", $stringToCheck)) { $noBadWordsFound = false; break; } } if ($noBadWordsFound) { ... } else { ... } 

Почему вы хотите использовать preg_match() здесь?
Как насчет этого:

 foreach($badwords as $badword) { if (strpos($string, $badword) !== false) echo "sorry bad word found"; else echo "string contains no bad words"; } 

Если вам нужно preg_match() по некоторым причинам, вы можете генерировать шаблон регулярного выражения динамически. Что-то вроде этого:

 $pattern = '/(' . implode('|', $badwords) . ')/'; // $pattern = /(one|two|three)/ $result = preg_match($pattern, $string); 

НТН

Если вы хотите проверить каждое слово, вставив строку в слова, вы можете использовать это:

 $badwordsfound = count(array_filter( explode(" ",$string), function ($element) use ($badwords) { if(in_array($element,$badwords)) return true; } })) > 0; if($badwordsfound){ echo "Bad words found"; }else{ echo "String clean"; } 

Теперь мне стало лучше, как насчет замены всех плохих слов из массива и проверить, остается ли строка такой же?

 $badwords_replace = array_fill(0,count($badwords),""); $string_clean = str_replace($badwords,$badwords_replace,$string); if($string_clean == $string) { echo "no bad words found"; }else{ echo "bad words found"; } 

Вот фильтр плохих слов, который я использую, и он отлично работает:

 private static $bad_name = array("word1", "word2", "word3"); // This will check for exact words only. so "ass" will be found and flagged // but not "classic" $badFound = preg_match("/\b(" . implode(self::$bad_name,"|") . ")\b/i", $name_in); 

Тогда у меня есть другая переменная с выделенными строками, чтобы она соответствовала:

 // This will match "ass" as well as "classic" and flag it private static $forbidden_name = array("word1", "word2", "word3"); $forbiddenFound = preg_match("/(" . implode(self::$forbidden_name,"|") . ")/i", $name_in); 

Затем я запускаю if на нем:

 if ($badFound) { return FALSE; } elseif ($forbiddenFound) { return FALSE; } else { return TRUE; } 

Надеюсь это поможет. Спросите, не нужно ли мне разъяснять что-либо.