Desulaid (21.03.2015)
Есть такая таблица ASCII в которой некоторым символам сопоставлены числовые коды. Именно на основе этой таблицы выполняется проверка ниже:
Вывод: компьютеру все равно, что он сравнивает число и букву сразу или по очереди, он сравнивает коды таблицы.PHP код:
if((inputtext[i] >= 0 && inputtext[i] <= 9) || (inputtext[i] >= 'a' && inputtext[i] <= 'z') || (inputtext[i] >= 'A' && inputtext[i] <= 'Z')) continue;
Теперь о скобках, ошибки возникают вероятно из-за того, что компилятор не понимает приоритета унарных операторов, и не может определить что с чем сравнивать, поставив скобки мы задаем явный приоритет, и поэтому ошибка пропадает.
Теперь о рациональности, оригинальный код был такой:
Если case переписать используя if он будет выглядеть примерно так:PHP код:
switch(inputtext[i])
{
case '0'..'9', 'a'..'z', 'A'..'Z': continue;
default: return ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Авторизация", "{FFFFFF}Введённый пароль содержит запрещённые символы!\nВведите пароль от аккаунта для входа на сервер:", "Вход", "Выход");
}
Итого теоретически по 62 проверки на каждый символ массива.PHP код:
case '0'..'9':
for(new j = 0; j < 10; j++)
if(inputtext[i] == i) return true;
'a'..'z':
for(new j = 97; j < 123; j++) // коды в таблице ASCII 97 - a, 122 - z
if(inputtext[i] == i) return true;
'A'..'Z:
for(new j = 65; j < 91; j++) // коды в таблице ASCII 65 - A, 90 - Z
if(inputtext[i] == i) return true;
В том варианте который предложил я выполняется проверка на диапазон, находится ли символ в диапазоне от до, всего 3 проверки.
Последний раз редактировалось NewGreen; 20.03.2015 в 23:55.
Desulaid (21.03.2015)
new string[148];{FFFFFF}Добро пожаловать на сервер - 34
Ваш ник зарегистрирован - 23
Логин: {1DBF3A}%s{FFFFFF} - 47
{FF0000}Неверный пароль! Осталось попыток: %d - 44
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)