![]() |
|
Модераторы: ginnie |
![]()
|
|
| Konsul |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 28.1.2008 Репутация: нет Всего: нет |
Доброго времени суток!
Вообщем есть строка $message, содержащая в себе некое сообщение. Нужно проверить, нет ли в нём матов и пр. нехороших слов. Все эти слова хранятся в словаре, т.е. в массиве @deny. Ищем их вот каким образом:
И получается, что на англоязычных словах (типа fuck и shit) она работает, определяет их исправно, а на русскоязычных (типа дурак) - пропускает их... Кто подскажет, в чём проблема? Заранее благодарен! |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 1 Всего: 49 |
Уважаемый Konsul, скорее всего не совпадают кодировки слова "дурак" в исходнике и в переменной $message.
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: нет Всего: 84 |
Как вариант - то что указал ginnie.
А логика верна? Чтобы сообщение не резать, то лучше пройтись по "словарю мат. слов", чем всё время преобразовывать сообщение в слова и сверять. Хотя у вас в скрипте очень много "ошибок". Вот как вариант.
P.S.: я не применял мат.слова, "дурак" пока ещё литературное Это сообщение отредактировал(а) nitr - 29.1.2008, 02:04 |
|||
|
||||
| Konsul |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 28.1.2008 Репутация: нет Всего: нет |
Проблема оказалась несколько другого плана. Дело не в языке, а в том, что список @deny считывается из файла:
И далее по списку идёт проверка по своему методу, или по вашему, nitr. И ничего не находит!(( А если задать прям в программе запретный список:
То всё находит. Как я понял, при считывании строк из файла в конце каждой строки добавляется символ перехода на след строку. Поэтому я добавил в код оператор chomp:
И всё равно не получается. Если после foreach написать чтобы она выписала все элементы массива (print $_), то они все слова выведутся в одну строку через пробел. Т.е. получается при считывании файла в массив в конце каждой строки добавляется непонятный символ. Подскажите, как тут быть? |
||||||
|
|||||||
| nitr |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: нет Всего: 84 |
Konsul, не знаю ваших причин, слишком мало инфы даёте...
deny_list.txt
test.pl
|
||||
|
|||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 1 Всего: 49 |
Уважаемый Konsul, возможно, я не прав, но как вариант: файл словаря в конце строк может иметь "\r\n" (windows), а скрипт запускается по unix'ом, где переменная $/="\n", поэтому после chomp() в каждом слове остается "\r". Судя по тому, что у Вас print() вывел слова с пробелами - это скорее всего не "\r".
Я бы вывел слова из массива
тогда все станет ясно. -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: нет Всего: 84 |
Если такая причина, то chomp(); можно заменить s/s+//g;
|
|||
|
||||
| Konsul |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 28.1.2008 Репутация: нет Всего: нет |
nitr, вот теперь всё ок работает! Попробовал ваш вариант, но такая же была фигня. А потом заменил chomp на s/s+//g и всё заработало! Спасибо!
Всем спасибо за комменты! Всем благодарен!!! |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Регулярные выражения | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |