[Tutorial] Validiranje RP imena


Započeo Dragi, Februar 27, 2025, 17:12:20 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

Validiranje RP imena

U ovom tutorialu, vodicu vas kroz ozbiljan i kompleksan proces provere RP imena, objasnjavajuci kljucne aspekte koje treba uzeti u obzir prilikom provere imena koje je u skladu sa pravilima zajednice.

Prvenstveno, morate koristiti Regex biblioteku za SA:MP. Ona ce nam neizmerno mnogo uprostiti proces validacije i kodiranja. Ko nece da koristi Regex, ima da se napati i sporije ce mu raditi funkcija.

Ko zeli vise da zna o Regexu, odnosno regularnim izrazima: Link skripte s FTN fakulteta, katedre za elektroniku
Link SA:MP biblioteke: Link GitHub

Sistem je prosao rigorozna testiranja od strane mene, jer je i radjen za neki moj projekat!

Zna se sta se prvo radi:
#include <Pawn.Regex>

Definisemo potrebne arraye. Menjate po vasem izboru sadrzaj, odnosno zabranjene reci u RP imenu.
// Definisanje niza sa imenom politickih imena
new const PolitickaImena[][] =
{
    "politika1", // Prva politicko ime
    "politika2", // Drugo politicko ime
    "politika3"  // Trece politicko ime
};

// Definisanje niza sa ruznim recima
new const RuzneReci[][] =
{
    "ruzna1", // Prva ruzna rec
    "ruzna2", // Druga ruzna rec
    "ruzna3"  // Treca ruzna rec
};

Kreiramo funkciju koja ce proveravati RP ime, funkciji moramo proslediti jedan parametar (obavezno const ili pada Pentagon), odnosno ime igraca kako bi ona bila u stanju da izvrsi kompleksne proverice. Prosledimo i ona sama sve resi, mi nista vise ne radimo.
public bool:IsValidRPNick(const name[]) // By Dragan Avdic (Dragi)
{
    // Proverava da li ime sadrzi politicka imena
    for (new i = 0; i < sizeof(PolitickaImena); i++)
    {
        // Ako se politicko ime nadje u imenu, vrati false
        if (strfind(name, PolitickaImena[i]) != -1) return false;
    }

    // Proverava da li ime sadrzi ruzne reci
    for (new j = 0; j < sizeof(RuzneReci); j++)
    {
        // Ako se ruzna rec nadje u imenu, vrati false
        if (strfind(name, RuzneReci[j]) != -1) return false;
    }

   // Proverava ime koristeci regex
   // Ako ime nije validno prema regex-u, vrati false
   if (!IsValidRpNickRegex(name)) return false;

    // Ako su svi uslovi ispunjeni, ime je validno
    return true; // ime je validno
}

Zatim kreiramo sledecu funkciju koja je pozvana unutar "IsValidRPNick" funkcije. (Gore navedene)
stock IsValidRpNickRegex(const nickname[]) // Funkcija koja proverava validnost RP imena
{
  static Regex:regex; // Deklaracija staticke varijable regex
  if (!regex) regex = Regex_New("[A-Z][a-z]+_[A-Z][a-z]+"); // Ako regex nije inicijalizovan, kreiraj novi regex obrazac

  return Regex_Check(nickname, regex); // Proveri da li nadimak odgovara regex obrascu
}
  • `[A-Z]` Ovaj deo izraza oznacava da prvi karakter mora biti veliko slovo (A do Z).
  • `[a-z]+`  Ovaj deo oznacava da nakon prvog velikog slova mora doci jedno ili vise malih slova (a do z). Znak + znaci "jedan ili vise".
  • `_`  Ovaj deo oznacava da mora postojati donja crta (_) nakon prvog dela imena.

Nece proci: ime_prezine, ime_, imeprezime...


To je to. Zavrsili smo potrebno kodiranje. Sad ostaje samo da objasnimo kako se funkcija koristi.

Upotreba:
if(!IsValidRPNick("Jovan_jovanovic")
{ 
    // Ime nije proslo proveru (npr. malo pocetno slovo u prezimenu)
    // Ispisemo tekst u chatu da ime nije proslo i kickujemo igraca (Delayed kickung!)
}
else
{
    // Ime je proslo proveru
    // Odlicna vest, obavestavamo korisnika kroz dialog da nema registrovan nalog
    // I trazimo od njega da se registruje, unese lozinku, pokazemo tdove, kako vec imate...
}

Zakljucak
Nadam se da ste nesto naucili i da vam se dopada tutorial. Ako niste, razmislite dobro, pa ponovo procitajte tutorial. Ako i dalje vam nesto nije jasno, slobodno pisite dole da razjasnimo. U zdravlje!


samp rp name check, samp validate rp name, samp isvalidrpname, samp invalid rp name, samp provera rp imena, samp funkcije

Lepo, vise preferiram koriscenje gde samo radis proveru i blokiras ukoliko nije ispravno bez regexa, takodje moze se uraditi i sa sscanf ili na ovaj nacin. Korisno.
HTML / CSS / Javascript / Inspect : Entry Masterclass.
ReactJS / Tailwind CSS / PWA / Axios / SCSS / Redux, ViteJS : Entry Masterclass.
C / C++ / C# / C-objective - kroz Pawn Lang : Entry Masterclass
Grupisano Pravljenje Objekata : Filterscript.


Sta je to web development?
To je nesto ono kao, kako bih to rekao, izgubis volju za zivotom i zelis da se ubijes, ali to je okej.
Onda jednostavno shvatis da si bio glup i resis problem, das sam sebi lajk,
skuvas NES 3u1 i pripremis se za sledeci projekat.