Алгоритм идентификации блондинок средствами JavaScript и PHP

123
S
На сайте с 13.07.2007
Offline
56
#11

Возможно подойдет эта функция php:

count_chars -- Возвращает информацию о символах, входящих в строку

Описание

mixed count_chars ( string string [, int mode])

Подсчитывает количество вхождений каждого из символов с ASII кодами в диапазоне (0..255) в строку string и возвращает эту информацию в различных формата. Необязательный аргумент mode по умолчанию равен 0. В зависимости от его значения возвращается:

0 - массив, индексами которого являются ASCII коды, а значениями - число вхождений соответствующего символа.

1 - то же, что и для 0, но информация о символах с нулевым числом вхождений не включается в массив.

2 - то же, что и для 0, но в массив включается информация только о символах с нулевым числом вхождений.

3 - строка, состоящая из символов, которые входят в исходую строку хотя бы раз.

4 - строка, состоящая из символов, которые не входят в исходую строку

K
На сайте с 12.07.2006
Offline
295
Kpd
#12

Обсуждать абстрактные вещи тяжело, поэтому накидал простенькую функцию, которая возвращает для блондинок специальное сообщение

function blond ($text) 

{
$lcase = 0;
$ucase = 0;
if (preg_match_all("#([a-zа-я]{1})#", $text, $match)) {
$lcase = count($match[0]);
}
if (preg_match_all("#([A-ZА-Я]{1})#", $text, $match)) {
$ucase = count($match[0]);
}
if ($ucase > $lcase) {
return "Сделайте глубокий вдох, медленно выдохните, аккуратно отключите клавишу CAPS LOCK, отпустите клавишу SHIFT и напишите сообщение без чрезмерного использования ЗАГЛАВНЫХ БУКВ.";
} else {
return ;
}
}

Что тут можно радикально улучшить, сделать производительнее?

dlyanachalas
На сайте с 15.09.2006
Offline
693
#13

Может тогда так лучше?

function blond ($text) 

{
$lcase = preg_match_all("#([a-zа-я]{1})#", $text, $match);
$ucase = preg_match_all("#([A-ZА-Я]{1})#", $text, $match);


if ($lcase === false && $ucase === false || ($lcase === false && $ucase !== false))
{
return;
}

if ($ucase > $lcase)
{
return "Сделайте глубокий вдох, медленно выдохните, аккуратно отключите клавишу CAPS LOCK, отпустите клавишу SHIFT и напишите сообщение без чрезмерного использования ЗАГЛАВНЫХ БУКВ.";
}

}
K
На сайте с 12.07.2006
Offline
295
Kpd
#14
dlyanachalas:
Может тогда так лучше?

Не понял. В моем коде $lcase и $ucase - количество букв в нижнем и верхнем регистре, если букв в верхнем регистре больше чем букв в нижнем, значит непорядок.

[Удален]
#15

ИМХО лучше считать количество заглавных букв и остальных, и разрешать в случаях если кол-во заглавных не привышает 1/4 (должно сработать) а ещё лучше считать маленькие буквы и если их меньше чем 3/4 то запрещать (т.е 1/4 может быть спец-символами, заглавными буквами и,т,д)

stealthy
На сайте с 15.06.2006
Offline
69
#16

Kpd, может не совсем в тему, но вообще у меня подозрение что лучше чем посимвольный перебор ты не напишешь ничего, а производительность в скрипте в две строки, который анализирует маленькие объемы данных тебе ни к чему. Так что отстань от людей :). Но при подобном решении ты действительно столкнешься с проблемой слов типа ДОСААФ, УЕФА и так далее в коротких комментах.

Я бы предложил если есть такая возможность попробовать яваскриптом отслеживать факт нажатия Caps Lock, либо засекать время нажатия клавиши Shift. Первое я не знаю как делать, разбираться сейчас некогда - спать иду, но второе делается тривиально, там на яваскрипте флаги есть в ивентах обработки keypress. В общем идея общая такая, что как только ты видишь непорядок, то на лету яваскриптом же делай капитализацию предложений. Просто твое сообщение типа "выруби капс дура" блондинке мало о чем скажет. Она еще капс искать будет полчаса и недоумевать в чем, собственно, дело. Проще за нее все это сделать втихаря. Наверное.

Twilight CMS (http://www.twl.ru): есть Free версия, очень проста и удобна в использовании. Консультирую по любым вопросам. Новый спорт - практическая стрельба (http://nikit.in) - не для офисного планктона.
S
На сайте с 13.07.2007
Offline
56
#17

stealthy, а зачем обязательно на всех распространять правило "блондинки". Имхо, его имеет смысл использовать для вновь зарегистрированных пользователей, которые на форуме меньше 3-6 месяцев. Для остальных такие средства как "молчанка" и "бан".

stealthy
На сайте с 15.06.2006
Offline
69
#18
solnikolay:
stealthy, а зачем обязательно на всех распространять правило "блондинки". Имхо, его имеет смысл использовать для вновь зарегистрированных пользователей, которые на форуме меньше 3-6 месяцев. Для остальных такие средства как "молчанка" и "бан".

Ну, это не у меня надо спрашивать, если Kpd захотел это дело автоматизировать значит зачем-то ему это нужно.

Я так вообще считаю что тут должна работать саморегуляция, а искуственно что-то навязывать приведет к необходимости исправления за пользователями орфографических ошибок и замены "албанского" на русский на лету. Многих админов это раздражает, но поделать с этим программными средствами вряд ли что-то можно.

Ayavryk
На сайте с 11.10.2003
Offline
209
#19

Править на сервере - некорректно. Лучше отлавливать на клиенте при помощи JS

<SCRIPT>

str = "adfasdfasdfaASDFASDFSADsfdasfasdfadsAAAAAAAAAAAWERTER ЫАВПЫВАПЫВАП";

s1=str.replace(/[^a-zа-я]/gi, "");

s2=s1.replace(/[a-zа-я]/g, "");

CAPS=s2.length/(1+s1.length)>0.2;

if (CAPS) alert('ТЕЛЕГРАММЫ НЕ ПРИНИМАЕМ ТЧК');

</SCRIPT>

Можно прилепить это к событию onchange и отлавливать на лету после того как пользователь введет первые 10-15 букв. Тогда ему не придется перепечатывать слишком много.

Тынгыр, мынгыр, комсомол (http://erum.ru). Ехари, ехари, (жалобно) аяврик. /народная тунгусская песня/
PHPExpert
На сайте с 04.02.2006
Offline
104
#20

Ayavryk, если блондинке так нужно написать большими буквами, то она сохранит html страницу на компе, удалить JavaScript и отправит своё сообщение без всяких затруднений. Поэтому тут лучше использовать PHP. Но как доп. вариант подойдёт. ;) Защита лишней не бывает!

123

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий