Сделать проверку на читабельность введенных данных

Spear

почемучка
Сделать проверку на читабельность введенных данных

Здравствуйте,
столкнулся с такой проблемой:

нужно запретить вводить абсолютно нечитабельные строки.
Полную защиту от подобного, скорее всего, сделать не получится, но мне хотя бы сделать проверку, не стоит ли подряд 4 или более согласных буквы:
ВПРК
FRTKZ
ZZZZZ.

Незнаю даже как это реализовать..
Есть одна идея, но мне кажется что это лдо меня уже делали и изобрели более простой способ..
А вообще идея такая:
сначала высчитывать длину слова (например "слово" maghtlkz),
затем проверяю каждый символ по очереди (от первого и до последнего, в цикле), и как только появляется согласная буква, увеличиваю счетчик, скажем, $badword на 1. (при встрече гласной буквы - счетчик анулировать).
Ну и если $badword вдруг "дорастет" до 4 то слово будет считаться нечитаемым.

Может все-таки есть что-то попроще? :)
 

ksnk

прохожий
форум фильтровать?

Ну, к примеру в русском языке есть слово в котором 6, а при желании даже 7 подряд согласных букв. Правда из-за не совсем корректности приводить его тут не буду :))
Также есть вполне себе приличные аббревиатуры.

Возможно, лучше пользоваться какими-либо автоматическими системами. к примеру - если online-переводчик справился - значит текст идейно-выдержан. Можно пользоваться также какими-либо системами online-корректировки текста, Orphus отчего-то в голове крутится...

А идея с 4 согласными легко решается регулярными выражениями, но, видимо, не в них счастье :)
 

Spear

почемучка
baev
Вообще эта проверка мне нужна для регистрации - чтобы не регистрировались шибко изобретательные юзеры.
не думаю, что кто-то решит зарегистрироваться под ником "делитанство" :)
ksnk
идея с 4 согласными легко решается регулярными выражениями
хм.. что-то немогу придумать регексп. Намекните, пожалуйста.
 

ksnk

прохожий
Я тоже - не силен :)
PHP:
$S="asdjahgaejweknde" ;
if (preg_match("/[bcdfghklmnprstvwxz]{4}/i",$S)){
    echo "Вхождение найдено.";
} else {
    echo "Вхождение не найдено.";
};
C русскими - аналогично....

-~{}~ 25.08.05 21:28:

Получается, что я, видимо, тоже не смогу зарегистрироваться :)
 

Spear

почемучка
ksnk
if (preg_match("/[bcdfghklmnprstvwxz]{4}/i",$S)){
аесли символов - 5 а не 4? а вдруг ник вообще "ггггггггг" или "zzzzzzzzzzzzzzzzzz" ? Регексп не катит ()хотя, может, я не понимаю что-то).

Получается, что я, видимо, тоже не смогу зарегистрироваться
Ну впринципе получается что - да. Хотя я думаю уже сделать эту ошибку при регистрации не критичной. То есть - сказать пользователю, что его ник скорее всего не читабельный, и в случае подтверждения нашей догадки вы будете удалены из базы. (ну и конечно же поставлю кнопочку "выбрать другой ник" :))
 

ksnk

прохожий
Хочется порекомендовать вам стать немного посильнее в регэкспах. :)
Эта магия срабатывает для 4 -х подряд идущих гласных! если встречается 5 подряд идущих гласных - то 4 раза подряд они как-бы тоже есть...
 

Spear

почемучка
аа.. ну да.
Я просто около трех недель не писал на РНР - отдыхал.
Немного не внимателен стал и позабывал многое :)))

Ещё возникла такая проблема:
нужно запретить пользователям использовать в логинах символы русского и английского алфавитов вмесет. (в целях безопасности.. Если этого не сделать, то, например, логин ksnk - это аж три разных логина. То есть:
1. Все символы - английские.
2. Все английские, но вервая "к" - русская
3. вторая "к" - русская.

Так же можно подменить логины с символами "а", "о" и .т.д

Делаю это так:

PHP:
if (preg_match("/^[a-zA-Z]+$/i",$_POST['nick']) AND preg_match("/^[а-яА-Я]+$/i",$_POST['nick'])) { $stopCode .= ":1_5:"; $badNick = 1; }
- реакции ноль. Спокойно проходят все сочетаня.
Например "Spear чудит" и т.п.
Может я где ошибку допустил...
 

Demiurg

Guest
не понимаю, зачем строить пользователю дополнительный проблемы при регистрации ... может вобще не стоит никого регистрировать ?
 

Spear

почемучка
Представь себе:
человек играет под ником, например, Вася. Играет себе, играет.. и видит человека с точно таким же ником (Вaся, буква "а" - на английском).
Обидно будет ему, а его знакомые могут запутаться.. ну и т.п.

Серьезно, непойму почему не работает
if (preg_match("/^[a-zA-Z]+$/i",$_POST['nick']) AND preg_match("/^[а-яА-Я]+$/i",$_POST['nick'])) { $stopCode .= ":1_5:"; $badNick = 1; }
 

Demiurg

Guest
Spear
подожди, а причем тут "нечитаемость" ?
вася с латинской а вполне читаемо.
 

Spear

почемучка
Demiurg
да нет, с нечитаемостью уже разобрались.
Последние мои два поста - это можно сказать - оффтоп. Но просто вопрос такой примитивный, что отдельную тему не хотелось бы создавать.
 

Demiurg

Guest
"примитивный" - это когда ты его понимаешь и можешьлегко объяснить другим.
 

Spear

почемучка
разобрался.
Дело в том, что в тесовом скрипте проверяемый логин был
"test тест"
а я проверял сначала одним регекспом, состоит ли ВЕСЬ ник из определенных символов, а потом второй раз тоже самое, только с другими символами.
Вообщем все что нужно было - убрать знаки окончания и начала строки:
preg_match("/[a-zA-Z0-9 ]+/", "тест test")

вуаля! :)
 
Сверху