Задать вопрос
colonel
@colonel
Разработчик PHP, Laravel

Замена плохих слов в сообщении звездочками

Делаю замену плохих слов в сообщениях на PHP.
Готового решения не нашел, делаю примерно так:

    public static function replaceFuckWords($message)
    {
        $pattern = '/ahole|ash0le|f u c k|bi.+ch/i'; // здесь сейчас не все слова, список будет большой
        return preg_replace($pattern, '*****', $message);
    }



То-есть регулярное выражение находит такие слова и меняет на пять звездочек. Все ок.

Но нужно заменять не на пять звездочек (как сейчас), а на количество соответствующее в найденном плохом слове.
Например cipa, нужно заменить на **** (четыре звездочки), а fatass — на ****** (шесть звездочек)

Есть у кого-то готовое решение, или идея как реализовать? Буду благодарен, спасибо.
  • Вопрос задан
  • 5224 просмотра
Подписаться 14 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
antoo
@antoo
Можно модифицировать ваш код следующим образом:
function replaceFuckWords($message)
{
    $pattern = '/(ahole|ash0le|f u c k|bi.+ch)/ie';
    return preg_replace($pattern, "str_repeat('*', strlen('$1'))", $message);
}


Суть в модификаторе e (PREG_REPLACE_EVAL).
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
splitface
@splitface
Вот у Kohana в классе Text есть метод для замены матюков.
Ответ написан
Комментировать
Например cipa, нужно заменить на **** (четыре звездочки)
Parti****tion.
Внимательнее с паттернами! Помню, как-то раз вылетел из чата при попытке ввести слово «скипидар». Вряд ли ваши пользователи обрадуются подобному повороту событий.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽