Thule
Умник
Функция проверяет имя (или любую другую строку) на правильность её написания по форматам:
Пример использования:
- Имя_Фамилия
- Имя_пр_Фамилия
- Имя_пр_пр_Фамилия
PHP:
stock IsRpName(name[])
{
new bool:allowUnderscore,bool:bigletter=true,wordsize;
new countUnderscore,bool:bigAfterUnscr[3],bool:needUnderscore;
for(new i=0;i<strlen(name);i++)
{
if(bigletter) //если требуется большая буква
{
switch(name[i])
{
case 'A'..'Z':
{
if(countUnderscore > 0) // значит цикл уже не в начале слова.
{
bigAfterUnscr[countUnderscore-1] = true; //после одного из _ была большая буква.
}
bigletter=false; //следующая буква должна быть маленькой.
wordsize++;
continue;
}
case 'a'..'z': //но может быть так, что не всегда после _ идет большая буква.
{ // это для особых ников по типу Saif_al_Adel или еще страшнее.
if(countUnderscore > 0)
{
wordsize++;
if(wordsize == 2) { needUnderscore=true; allowUnderscore=true; bigletter=false; } //заставляем проверить на _ . Приставка не может быть более 2х символов.
//if(wordsize > 2) return 0; //приставка слишком большая получилась.
}
continue;
}
}
return 0;
}
if(!bigletter) //если не требуется большая буква, то может быть два варианта:
{ // 1 - маленькая буква; 2 - подчеркивание.
switch(name[i])
{
case 'a'..'z':
{
if(needUnderscore) return 0; // нужно было обязательное подчеркивание, а его не было.
wordsize++;
if(wordsize >= 2) allowUnderscore=true; //если слово состоит из двух или более букв, то разрешаем подчеркивание.
continue;
}
case '_':
{
if(!allowUnderscore) return 0; //мы не разрешали ставить подчеркивание.
if(wordsize < 2) return 0; //с_л_и_ш_к_о_м_ч_а_с_т_о_п_о_д_ч_е_р_к_и_в_а_н_и_я
needUnderscore=false;
bigletter=true;
countUnderscore++;
if(countUnderscore > 3) return 0; // слишком много приставок.
wordsize=0;
continue;
}
}
return 0;
}
}
if(!bigAfterUnscr[0] && !bigAfterUnscr[1] && bigAfterUnscr[2]) return 1; // Saif_al_mah_Del
if(!bigAfterUnscr[0] && bigAfterUnscr[1] && countUnderscore == 2) return 1; //Saif_al_Adel
if(bigAfterUnscr[0] && countUnderscore == 1) return 1; //Saif_Adel
return 0;
}
[09:49:13] 1 - Saif_Adel
[09:49:13] 1 - Saif_al_Adel
[09:49:13] 1 - Saif_al_ma_Adel
[09:49:13] 0 - Saif_al_mah_Adel
[09:49:13] 0 - Saif_adel
[09:49:13] 0 - saif_sdel
[09:49:13] 0 - saif__Adel
[09:49:13] 0 - SAif_AdEl
[09:49:13] 0 - Saif_Ga_Adel
[09:49:13] 0 - Saif_aG_dyn_Adel
[09:49:13] 0 - Saif_Adel99
[09:49:13] 0 -aif_Adel
[09:49:13] 0 - Saif_al_da_ma_Adel
[09:49:13] 1 - Saif_al_Adel
[09:49:13] 1 - Saif_al_ma_Adel
[09:49:13] 0 - Saif_al_mah_Adel
[09:49:13] 0 - Saif_adel
[09:49:13] 0 - saif_sdel
[09:49:13] 0 - saif__Adel
[09:49:13] 0 - SAif_AdEl
[09:49:13] 0 - Saif_Ga_Adel
[09:49:13] 0 - Saif_aG_dyn_Adel
[09:49:13] 0 - Saif_Adel99
[09:49:13] 0 -
[09:49:13] 0 - Saif_al_da_ma_Adel
Пример использования:
PHP:
public OnPlayerConnect(playerid)
{
new playername[21];
GetPlayerName(playerid,playername,21);
if(!IsRpName(playername)) return SendClientMessage(playerid,COLOR_RED,"У Вас НОН-РП Имя.");
return 1;
}
