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

Есть у кого-то готовое решение, или идея как реализовать? Буду благодарен, спасибо.
  • Вопрос задан
  • 4785 просмотров
Решения вопроса 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).
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Например cipa, нужно заменить на **** (четыре звездочки)
Parti****tion.
Внимательнее с паттернами! Помню, как-то раз вылетел из чата при попытке ввести слово «скипидар». Вряд ли ваши пользователи обрадуются подобному повороту событий.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы