Здравствуйте! Мой форум (на основе phpbb2) задуман как русскоязычный. Как мне блокировать сообщения пользователей на английском и немецком, по сути являющиеся спамом? Думаю, что регулярные выражения помогут, но не умею пользоваться ими на таком уровне, чтобы что-то изменить в скрипте форума. Прошу помоши: как сделать так, чтобы скрипт форума распознавал четыре слова подряд не на русском языке и запрещал выкладывать сообщение, включающее больше четырех иностранных слов подряд? А пользователю в ответ шло бы сообщение типа "Если вы смогли зарегистрироваться на русскоязычном форуме, будьте добры выкладывать свои сообщения на русском языке". Размер в четыре слова - это для того, если кто-то в русскоязычном контенте напишет название фирмы или программы на иностранном языке. Спасибо.
Злой модератор - в перспективе. Форум пока еще не раскручен до таких масштабов. Но, не будем отклоняться от темы. Прошу помочь альтруиста, кто хорошо "шарит" в конфигурации форума phpbb и, кроме того так же хорошо - в регулярных выражениях. Спасибо.
Насчет регвыров - одними ими не обойдешься. Нужно подсчитать число латинских символов в сообщении, исключая ссылки и цитаты, и поделить на число русских символов. Затем сделать минимальный размер сообщения хотя бы 20-30, чтобы бот не резал сообщения вроде "golduser, +1" и иже с ними, или же поставить боту минимальное число символов в сообщнии, когда начинать работать. Короче, проблем много, и про модератора это была не шутка.
Сообщения, где подряд идут четыре и меньше иностранных слова (или знака), разделенных пробелом, бот блокировать не должен. Вот начало кода (содрал откуда-то): Код (Text): <?php $text = 'ТЕКСТ, содержащий русские и английские слова и буквы'; // Удаляем лишние символы $pattern = "|[^a-zа-яё@\*\)\(\?\!\-\~\]\[=\s]+|is"; $text = preg_replace($pattern, "", $text); // Удаляем лишние пробелы и символы табуляции $text = preg_replace("|[ \t]+|", " ", $text); // Разбиваем содержимое $text - формируем массив $arr = preg_split("|[\r\n]+|", $text); // Выводим дамп массива echo "<pre>"; print_r($arr); echo "</pre>"; ?> Но вместо "echo" скрипт должен найти подряд пять слов или знаков, разделенных пробелом.
Можно еще проще: распознавать только первые две буквы первого слова сообщения как нерусские! Этого будет достаточно.
golduser А если это тэг ? (вот как в моём случае это символы "[b") Тупо надо поставить регулярку на проверку отсутствия русских букв.
Точно! А куда её впендюрить? В смысле, в какой файл форума? И потом, как достать имейл пользователя и отправить ему "багдадскую дыню в целлофане", типа "пиши по-русски"?
posting.php На случай проверять ещё и длинну. Т.е если сообщение больше "некоторого количества символов" и при этом нет ни одного русского символа, то значит оно не русское.
Спасибо! Так правильно-проверка на отсутствие русских букв? (сам составил): Код (Text): $str = "ТЕКСТ"; if(preg_match("#([a-z]{1,}[, ]+)[a-z]{1,}#i",$str)) { echo "пиши по-русски";} else { echo "Ваше сообщение добавлено"; }