if(strpos($string, "A Bad Word") != false){ echo 'This word is not allowed'; } if(strpos($string, "A Bad Word") != false){ echo 'This word is not allowed'; }
Хорошо, поэтому я пытаюсь проверить данные отправки, чтобы увидеть, есть ли недопустимые слова. Вместо того, чтобы делать 5 экземпляров, есть ли более эффективный способ?
Я уверен, что есть более умный способ сделать это в целом.
Если вы просто хотите быть более краткими, то, вероятно, лучше всего перебрать некоторые плохие слова, вместо добавления повторяющихся, почти идентичных условностей (ifs):
<?PHP $banned = array('bad','words','like','these'); $looksLikeSpam = false; foreach($banned as $naughty){ if (strpos($string,$naugty) !== false){ $looksLikeSpam=true; } } if ($looksLikeSpam){ echo "You're GROSS! Just... ew!"; die(); }
Edit: Также обратите внимание, что в вашем вопросительном коде вы тестируете strpos! = False. Вы действительно хотите! ==, поскольку strpos () вернет 0, если первое слово, скажем, PENIS. 0 будет изменено на false. Смотрите, куда я пойду?
Кроме того, вы, вероятно, хотите использовать stripos (), чтобы не учитывать регистр (если вам не все равно, если люди SHOUT оскорбительные слова) 🙂
Да, вы можете создать множество багов и создать из него регулярное выражение. Это также облегчило бы обработку данных без учета регистра.
$badwords = array('staircase', 'tuna', 'pillow'); $badwords_regex = '/' . implode('|', $badwords) . '/i'; $contains_badwords = preg_match($badwords_regex, $text);
Нет, это дерьмо. Существует целая отрасль вычислительной науки в отношении алгоритмов поиска строк . Хек, Кнут даже посвятил половину 3- го тома TAOCP .
Boyer-Moore – хороший алгоритм, который теперь используется во многих приложениях, связанных с поиском нескольких игл в стоге сена.
Вы должны быть осторожны с границами слов, иначе люди будут жаловаться на то, что не смогут вводить слова типа «волан».
Я надеюсь, что вы (или ваш клиент) понимаете, что автоматическая фильтрация «озорного слова» не устраняет необходимость в модерировании. Есть много способов оскорбить, не используя ни одного из якобы непослушных слов. Даже принятие решения о том, что является или не является оскорбительным, зависит от культурного контекста.
Вы могли бы объединить их как одно регулярное выражение, а затем использовать preg_grep (), чтобы подтвердить их существование
Используйте массив значений и перебирайте массив, проверяя переданное слово каждый раз. Если найденное совпадение выходит из цикла и возвращает true.
Вы можете использовать функцию PHP in_array, а не цикл, если вы проверяете одно слово. Регулярное выражение было бы лучше, если бы вы проверяли целое предложение.
http://us2.php.net/manual/en/function.in-array.php
$bad_word_array=array('weenis','dolt','wanker'); $passed=in_array($suspected_word,$bad_word_array);