RolePlay Name Validator
#1

нужно сделать проверку чтоб был символ _ ,левая и правая часть не совпадала,левая и правая часть с большой буквы,чтоб не было цифр в нике
Делаю так

PHP код:
main()
{
    if( 
GetRPName ("Vasya_Pupkin") == ) print("Работает");
    if( 
GetRPName ("Vasya_Pupkin") == ) print("Не работает");
    if( 
GetRPName ("Vasya2_Pupkin") == ) print("Не работает проверка на цифры");
    if( 
GetRPName ("vasya_pupkin") == ) print("Не работает проверка на маленькие буквы");
    if( 
GetRPName ("pupkin_pupkin") == ) print("Не работает проверка на одинковые части");
    if( 
GetRPName ("vasyapupkin") == ) print("Не работает проверка на символ \"_\" ");

выводит :
Код:
Не работает
Не работает проверка на цифры
Не работает проверка на маленькие буквы
вот сток что с ним не то?=)

PHP код:
stock GetRPName(name[])
{
    new 
0;
    new 
Left[32],Right[32];
    if(
strfind(name,"_",true,1) != -1f++;
    for(new 
;strlen(name); i++)
    if( 
name[i]<='9' && name[i]>='0' f--;
    new 
pos strfind(name,"_",true,-1);
     
strmid(Leftname0pos,32);
     
strmid(Rightnamepos+1,32,32);
    if(
Right[0] >='A' && Right[0] <= 'Z' && Left[0] >='A'&& Left[0] <= 'Z'f++;
    if(
strcmp(RightLefttrue)) f++;
    if(
== 2) return 1;
     return 
0;

Reply
#2

в начале f=0;
потом если есть _ то +1
если первые буквы обеих частей большие +1
если левая и правая части разные +1
следовательно, при правильном варианте выведет f равно 3, а ты проверяешь на равность 2
Reply
#3

Quote:

for(new i ;i < strlen(name); i++)
if( name[i]<='9' && name[i]>='0' ) f--;

тут f -1 тобишь 2
Reply
#4

Quote:
Originally Posted by sk47
Посмотреть сообщение
тут f -1 тобишь 2
if(f == 3) return 1;
Reply
#5

pawn Код:
stock GetRPName(name[])
{
    new f = 0, pos, Right[MAX_PLAYER_NAME];
    /*
     * убиваем сразу 3х зайцев:
     * 1) проверяем есть ли "_"
     * 2) запоминаем где находится "_"
     * 3) убеждаемся что "_" не стоит в нулевой позиции, ники типа "_AlexStoyn"
     * PS если тебя не кстраивают ники типа A_lexStoyn ставь вместо нуля еденицу. Ну и так далее, если у тебя есть минимальная длина для имени.
     */

    if((pos = strfind( name, "_", true)) > 0) f++;

    for(new i ;i < strlen(name); i++)
    if( '0' <= name[i] <= '9') //равносильно, твоей но нагляднее
    {
        f--;
        break;//нашли одну цифру, обрываем цикл, нафига бежать далее если ник уже не соответствует.
    }

    if('A' <= name[0] <= 'Z' && 'A' <= name[pos+1] <= 'Z')f++;//все генеальное просто :)

    strmid(Right, name, pos+1, strlen(name), MAX_PLAYER_NAME);

    if(strcmp(name, Right, true))f++;//вторая переменная не нужна

    if(f == 3) return 1;
    return 0;
}
Reply
#6

регулярки рулят епте...
Reply
#7

Quote:
Originally Posted by Romanius
Посмотреть сообщение
регулярки рулят епте...
не все ими владеют, и использовть доп плагин ради одной проверки нецелесобразно.
Если по коду ещё планируется туева куча поисков в тексте, то регулярам нет равных, и подключение плагина рационально.

Кстати уместна будет поговорка: "Не стоит стрелять по воробъям из пушки".
Reply
#8

можно использовать для выравнивания диалоговых данных, таких как статы напрмер. если владеть ими, то уже наверно обычные строковые функции будет не нужны вовсе...
Reply
#9

Quote:
Originally Posted by Romanius
Посмотреть сообщение
можно использовать для выравнивания диалоговых данных, таких как статы напрмер. если владеть ими, то уже наверно обычные строковые функции будет не нужны вовсе...
\t чем плох?
Reply
#10

Quote:
Originally Posted by Makar93
Посмотреть сообщение
\t чем плох?
речь не о средствах, а о способах.
Стандартными средствами, ты определяешь длину ников и подставляешь необходимое числ табов, через регулярки, это делается в одну операцию.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)