Задать вопрос
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 — на ****** (шесть звездочек)

Есть у кого-то готовое решение, или идея как реализовать? Буду благодарен, спасибо.
  • Вопрос задан
  • 5207 просмотров
Подписаться 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.
Внимательнее с паттернами! Помню, как-то раз вылетел из чата при попытке ввести слово «скипидар». Вряд ли ваши пользователи обрадуются подобному повороту событий.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы