Intereting Posts
Как изменить цвет надписи, нарисованной с помощью функции newPseudoImage PHP Imagick? Найти, если последние два символа в имени файла – это числа Laravel 4 – перенаправление на маршрут внутри javascript-кода Blade template PHP: необходимо дважды войти в систему до тех пор, пока не будут установлены переменные сеанса Ошибка JavaScript JavaScript не работает! щелкнуть даже Как отключить кнопку отправки после отправки в PHP? PHP call_user_func против просто вызывающей функции Использование регулярного выражения для фильтрации года фиксированной длины 0 или 4 цифры строка состояния facebook Как получить тренд facebook относительно страны? Сообщение электронной почты для php-скрипта PHP с использованием preg_replace: «Ошибка разделителя не должна быть буквенно-цифровой или обратной косой чертой». Насколько безопасна функция завитки от обнюхивания? Формат JSON для столбца в столбце Google Анализ или анализ динамического логического выражения в PHP?

Проверить строку на плохие слова?

Возможный дубликат:
Эффективный способ проверки строки для определенных слов

Я хочу проверить, содержит ли строка какое-либо из этих слов: запрет, плохой, пользовательский, пропуск, стек, имя, html .

Если в нем содержится какое-либо из слов, мне нужно повторить количество плохих слов

str = 'Hello my name is user'; 

Related of "Проверить строку на плохие слова?"

Я думаю, что что-то вроде этого будет работать:

 $badWords = array("ban","bad","user","pass","stack","name","html"); $string = "Hello my name is user."; $matches = array(); $matchFound = preg_match_all( "/\b(" . implode($badWords,"|") . ")\b/i", $string, $matches ); if ($matchFound) { $words = array_unique($matches[0]); foreach($words as $word) { echo "<li>" . $word . "</li>"; } echo "</ul>"; } 

Это создает массив запрещенных слов и использует регулярное выражение для поиска экземпляров этих слов:

  • \b в Regex указывает границу слова (т.е. начало или конец слова, определяемое либо началом / концом строки, либо символом без слова). Это делается для предотвращения «критических» ошибок – т. Е. Вы не хотите запрещать слово «баннер», когда хотите только совместить слово «запрет».

  • Функция implode создает единственную строку, содержащую все ваши запрещенные слова, разделенные символом pipe, который является оператором or в Regex.

  • Часть implode в Regex окружена круглыми скобками, так что preg_match_all будет захватывать запрещенное слово как совпадение.

  • Модификатор i в конце Regex указывает, что совпадение должно быть чувствительным к регистру – то есть оно будет соответствовать каждому слову независимо от его капитализации – «Запрет», «запрет» и «BAN» будут соответствовать совпадению слова «запрет» в $badWords .

Затем код проверяет, были ли найдены совпадения. Если есть, он использует array_unique чтобы сообщать только один экземпляр каждого слова, а затем выводит список совпадений в неупорядоченном списке.

Это то, что вы ищете?

Это то, что вы хотите.

 function teststringforbadwords($string,$banned_words) { foreach($banned_words as $banned_word) { if(stristr($string,$banned_word)){ return false; } } return true; } $string = "test string"; $banned_words = array('ban','bad','user','pass','stack','name','html'); if (!teststringforbadwords($string,$banned_words)) { echo 'string is clean'; }else{ echo 'string contains banned words'; } 
  • \ B в шаблоне указывает границу слова, поэтому сопоставляется только отдельное слово «сеть», а не слово, такое как «webbing» или «паутина»,

    if (preg_match ("/ \ bweb \ b / i", "PHP – это язык веб-скриптов по выбору.")) {echo "найдено совпадение."; } else {echo "Совпадение не найдено."; }

     if (preg_match("/\bweb\b/i", "PHP is the website scripting language of choice.")) { echo "A match was found."; } else { echo "A match was not found."; } 

Это ваш лучший выбор. Как указано в начале, вы можете управлять своим регулярным выражением.

Это прямо из php.net

 function check_words($text) { $text=$text; $bad_words = file('bad_words.txt'); $bad = explode(" | ",$bad_words[0]); $b = '/\W' . implode('\W|\W', $bad) . '\W/i'; if(preg_match($b, $text)){ echo $text ." - Contain Bad words!"; other function here } else { echo $text ." - Not containing bad words :D"; // other function here } } 

Пример: check_words('He is good');

Это работает хорошо, хотя что-либо после финала / , похоже, не проверяется, например, http://www.mysite.com/thisbit , этот thisbit не может быть проверен на наличие плохих слов.

Он снова работает, как только он набирается следующим образом: http://www.mysite.com/thisbit/ , с завершающим / .

Не уверен, что это можно исправить или нет.

 function check_words($text) { $text=$text; $bad_words = file('bad_words.txt'); $bad = explode(" | ",$bad_words[0]); $b = '/\W' . implode('\W|\W', $bad) . '\W/i'; if(preg_match($b, $text)){ echo $text ." - Contain Bad words!"; # - other function here } else{ echo $text ." - Not containing bad words :D"; # - other function here } } # - Example check_words('He is good'); 

Надеюсь, это поможет .. вы можете поместить все плохие слова в файл bad_words.txt .

Упорядочить плохие слова в txt как:

 bad_words1 | bad_words2 | bad_words3 | bad_words4 ... 

Примечание: вы также можете добавить что-то вроде:

 bad words 1 | bad words 2 | bad words 3 

пока он находится в «|» формат.