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

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

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
24 апр. 2024, в 20:57
3000 руб./за проект
24 апр. 2024, в 20:35
5000 руб./за проект