Хобрук: Ваш путь к мастерству в программировании

Как отфильтровать несколько запрещенных слов в строке?

На моем сайте есть форма обновления статуса, которую пользователи заполняют, чтобы обновить свой статус, максимум 160 символов. Пока на моей форме есть некоторые ограничения, такие как: "Пользователь не может размещать >160 символов, если он добавит >160 символов, то ему будет показано предупреждающее сообщение". У меня все работает.

Теперь я хочу добавить ограничение на пользовательский ввод, а это означает, что если пользователь вводит запрещенные слова, то сообщение не будет отправлено, и пользователь увидит сообщение об ошибке.

Запрещенные слова: Facebook, Twitter, Whatsapp, Mxit, Qeep.
Пока я могу добавить только одно слово в свою функцию, я хочу добавить в нее все вышеперечисленные слова, помогите пожалуйста! спасибо

 <?php

 $txt = $_POST['msg'];

 if (strlen($txt) > 160) {
     echo "Your post contains more then 160 chrecters";
     $checking = substr($txt, 160);
     echo "<del style='color:red;'>$checking</del>";
 }

 if (preg_match("/Facebook/", $txt)) {
     echo "the post contains words restricted!";
 }
 //else send data to the database

  • вы ищете только слова? т. е. facebook или поиск abcfacebookxyz 10.01.2015
  • @AnandPatel Facebook, Twitter и т. д. Я упомянул в своем посте, я не хочу, чтобы мои пользователи включали эти целевые слова в свой пост, вот и все! 10.01.2015

Ответы:


1

Так как строка очень короткая:

<?php

// Note that this will remove newlines!
$message = filter_input(INPUT_POST, "msg", FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_ENCODE_AMP);

// Note the usage of a mutli-byte function.
if (mb_strlen($message) > 160) {
    exit("Your message contains more then 160 characters.");
}

// Array containing the all lower-cased words which are restricted.
$restricted_words = array("facebook", "twitter");

// Lowercase the message for our search (again multi-byte).
$words = mb_strtolower($message);

// Create an array by splitting the words at the grammatically correct word
// delimiter character (a space).
$words = explode(" ", $words);

// Flip the array, so we can directly check with isset() for existence.
$words = array_flip($words);

// Now go through all restricted words and see if they are part of the message.
foreach ($restricted_words as $delta => $restricted_word) {
    if (isset($words[$restricted_word])) {
        exit("Your message contains a restricted word.");
    }
}

Я вижу одну проблему во всем вашем подходе, поскольку вы проверяете только идеально напечатанные слова. Многие проекты в прошлом пытались навязать своим пользователям фильтры ненормативной лексики и тому подобное. Вот почему вы часто видите, как люди публикуют fu@# или dafuq вместо фактического слова fuck или what the fuck. Ваши пользователи могут просто прибегнуть к чему-то подобному и опубликовать FB вместо Facebook. Просто подумайте, действительно ли необходим такой фильтр слов. Если это так, рассмотрите возможность использования расстояния Левенштейна, чтобы проверить, похожи ли слова (это быть дорогостоящей операцией и, возможно, давать ложные срабатывания).


И наконец, регулярное выражение, которое вы искали:

<?php

preg_match("/(Facebook|Twitter)/i", $message, $matches);

Скобки создают группу, а вертикальная черта используется для разделения различных альтернативных слов, которые мы хотим сопоставить. И последнее, но не менее важное: модификатор i используется для того, чтобы сделать все это нечувствительным к регистру. Третий (необязательный) параметр будет содержать совпадения, чтобы вы могли сообщить пользователю, какие запрещенные слова были найдены в сообщении.

10.01.2015
Новые материалы

Аргументы прогрессивного улучшения почти всегда упускают суть
В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

Введение в Джанго Фреймворк
Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

стройный-i18следующий
Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..

Обзор 20 основных и современных методов работы с массивами в JavaScript
Вы знаете их всех? В этом коротком посте я покажу сводку методов, доступных в JavaScript для работы с массивами. Я надеюсь, что вы найдете это полезным! В конце поста вы найдете ссылку на..

Да, но я чувствую необходимость указать, что это или не единственные два.
Да, но я чувствую необходимость указать, что это или не единственные два. Обучение с подкреплением (в качестве примера) также является важным.