Forum Webscript.Ru

Программирование => PHP => Тема начата: Foshvad от 02 Сентября 2001, 22:50:51

Название: антимат
Отправлено: Foshvad от 02 Сентября 2001, 22:50:51
Люди, кто разбирается в синтаксисе регулярных выражений, помогите сделать функцию для анимата
Должна она делать примерно следующее:

плохое_слово -> пл********во;
нехорошее_слово -> не********во;
нецензурное_слово -> нецен********во;

Можно было обойтись str_replace, но она чуствительна к регистру и предусмартивать все варианты больших
 и маленьких букв будет накладно.
Название: Антимат
Отправлено: Doctor013 от 28 Сентября 2001, 08:35:45
Есть у меня скриптик,  точнее процедура, на входе - строка, на выходе - флаг. Правда, нужна доработка, предусмотреть все ситуации без коллективного разума не получится. Если интересно - вышлю
Название: антимат
Отправлено: от 05 Октября 2001, 07:36:29
а чем тебе не подходит
 eregi_replace()??
 $str= "Все вы п____лы";
 $pat= "п_____лы"; #только здесь придется сделать цикл
 $repl ="*******";  # по массиву
 echo (ereg_replace($pat,$repl,$str));
 вывод - Все вы ******
 Массив -это "словарь" не цензурных выражений
Название: антимат
Отправлено: Doctor013 от 05 Октября 2001, 08:08:21
Можно сделать и так, решений много.  Слабое место твоей проверки- ты сразу меняешь мат на звездочки, в общем случае можно сделать выбор реакции - либо менять, либо выводить предупреждение о недопустимости мата в сообщении. Кстати, наткнулся еще на одни грабли - некоторые "продвинутые" меняют русские буквы на похожие английские или заменяют "а" на @. Ругались бы наши юзеры на русском - проблем бы не было, меняешь буквы и проверяешь, но ведь они ругаются и на английском и на немецком. Можно, конечно сделать анализ слова на предмет принадлежности к русскому или какому другому языку, но можно тогда представить, во что выльется наш скрипт. Единственное оптимальное решение, которое я нашел - это в словаре  нецензурных выражений тоже сразу поменять латиниские символы на кириллицу. Тогда у нас получается следующий алгоритм: получаем проверяемую строчку, копируем ее и начинаем обрабатывать: опускаем в нижний регистр, меняем латиницу на кирилицу ("a" на "а", "f" на "ф", "@" на "а" и тд) и  проверяем на вхождение  мата. Результат проверки может быть сообщение или сразу в исходной строке меняем на "*" . Если видишь слабые места в алгоритме - пиши...