Для тех кто владеет языками C\C++ данный инклуд очень понравится! Он предназначен для работы с символами, и является точной копией оригинального заголовочного файла стандартной библиотеки ctype.h Функции: isalnum - проверка на принодлежность символа множеству букв и цифр (A-Z, a-z, 0-9) isalpha - проверка на принодлежность символа множеству букв (A-Z, a-z) iscntrl - проверка на принодлежность символа множеству управляющих сомволов (коды ASCII 0..31 и 127) isdigit - проверка на принодлежность символа множеству цифр (0-9) isgraph - проверка на принодлежность символа множеству печетаемых символов, кроме пробела islower - проверка на принодлежность символа множествубукв нижнего регистра (a-z) isprint проверка на принодлежность символа множеству печатаемых символов ispunct - проверка на принодлежность символа множеству знаков пунктуации isspace - проверка на принодлежность символа множеству символов разделителей isupper - проверка на принодлежность символа множествубукв верхнего регистра (A-Z) isxdigit - проверка на принодлежность символа множеству шестнадцатеричных цифр Функции принимают величину int и возвращают значение true если условие выполняется. Примеры: new name[24]; GetPlayerName(playerid, name, sizeof(name)); for(new i; i<sizeof(name); i++) { if(!isalnum(name[i])) Kick(playerid); // если символ не принадлежит множеству A-Z, a-z, 0-9 }
new playername[24]; strmid(playername, inputtext, 0, strlen(inputtext), 255); for(new i; i<sizeof(playername); i++) { if(!isalnum(playername[i])) { format(string,sizeof(string),"{ffffff}Ник {ff0000}%s {ffffff}не подходит требованиям.\n\ [ {ff0000}! {ffffff}] Имя может быть не менее 3 и не более 20 символов.\n\ [ {ff0000}! {ffffff}] Имя должно быть формата - A-Z, a-z, 0-9. - {ff0000}Проверьте правильность этого пункта.", playername); ShowPlayerDialog(playerid, 3, DIALOG_STYLE_INPUT, "Имя вашего персонажа", string, "Ввод",""); return 1; } }
Здравствуйте, я перебробовал много разных способов как проверить ник игрока на формат A-Z, a-z, 0-9 и нашёл инклуд ctype который позволяет проверить принадлежность символа.
Может кто то работал в данной области и подскажет как мне сделать такую проверку. |
stock checkstr(string[])
{
for (new i = strlen(string)-1; i != -1; i--)
{
if ('z' < string[i] < 'a' && 'Z' < string[i] < 'A' && 9 < string[i] < 0)
{
return 0;
}
}
return 1;
}
Нестабильно.
С первого раза проверка - if(!checkstr(inputtext)), вписал сходу $$$ пропустило. Со второго раза проверка - if(checkstr(inputtext)), вписал lolwhat - не пропустило. С третьего раза опять проверка - if(!checkstr(inputtext)), вписал lolwhat не пропустило, набор тупых символов - не пропустило, набор цифр - не пропустило. Какое значение возвращает функция если в нике нет никаких других символов кроме A-Z, a-z, 0-9? |
stock checkstr(string[])
{
for (new i = strlen(string)-1; i != -1; i--)
{
if ( !('a' < string[i] < 'z' || 'A' < string[i] < 'Z' || 0 < string[i] < 9) )
{
return 0;
}
}
return 1;
}
if ( !('a' <= string[i] <= 'z' || 'A' <= string[i] <= 'Z' || 0 <= string[i] <= 9) ) правильнее вот так, т.к. символы a и z не подходят к данному условию) Только цифры почему то не проходят проверку.
|
stock checkstr(string[])
{
for (new i = strlen(string)-1; i != -1; i--)
{
if ( !('a' <= string[i] <= 'z' || 'A' <= string[i] <= 'Z' || '0' <= string[i] <= '9') )
{
return 0;
}
}
return 1;
}
stock isalnum© { (c >= 0x30 && c <= 0x39) || (c >= 0x41 && c <= 0x5A) || (c >= 0x61 && c <= 0x7A) return true; else return false; }