[PHP] Regular expression om username te valideren

Pagina: 1
Acties:

  • Aphax
  • Registratie: Juli 1999
  • Laatst online: 03-06 23:32
Ik wil op een website bezoekers kunnen laten inloggen met een username + password. Eigenlijk heb ik al zoiets, alleen loggen ze nu in aan de hand van een user id. Dit wil ik dus zo veranderen dat dat met de username kan, alleen wil ik een aantal karakters niet toestaan om het netjes te houden. Daarvoor wil ik dus een simpele functie schrijven die de username valideerd. Ik wil 1 of meer instanties van 1 van de volgende karakters toestaan a-z, A-Z, 0-9, [, ], {, }, -, | en een spatie. Dit is wat ik nu heb:
PHP:
1
<?function checkUsername($string) {    if(eregi("^[a-zA-Z0-9 ]+$", $string)) {      return true;    } else {      return false;    }}$username = "[G] Aphax";if(checkUsername($username)) {    echo "<strong>$username</strong> is allowed";} else {    echo "<strong>$username</strong> is not allowed";}?>

Zoals je ziet checked hij alleen nog maar op a-z, A-Z, 0-9 en een spatie. Ik heb \] (escaped) geprobeerd te gebruiken maar die matchde niet. Weet iemand wat ik over het hoofd zie? Ik heb de search geprobeerd te gebruiken maar ik vind geen bruikbare topics. :(

  • Grum
  • Registratie: Juni 2001
  • Niet online
[-A-Z0-9\\[\]\|\{\} ]

  • Aphax
  • Registratie: Juli 1999
  • Laatst online: 03-06 23:32
Die pakt ie dus niet :(

[EDIT: links dood]

Daar draait ie, ik kan aan je suggestie ook niks fouts ontdekken. :( Maar in ieder geval bedank :)

  • Grum
  • Registratie: Juni 2001
  • Niet online
misschien lowercase chars ook ff toelaten ? :D

ik ga toch zeker niet alles voorkauwen ;)

  • Aphax
  • Registratie: Juli 1999
  • Laatst online: 03-06 23:32
Uhh, oops, een portie onoplettendheid aan mijn kant :)

Maar ik heb het nu veranderd en hij pakt het nog steeds niet, volgens mij is eregi() zowiezo al case-insensitive. Heb ik weer iets fouts gedaan? Want nu zie ik er echt niks verkeerd aan :(

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Probeer eens met dubbele slashes :?
[-A-Z0-9\\\[\\]\\|\\{\\} ]

  • Aphax
  • Registratie: Juli 1999
  • Laatst online: 03-06 23:32
Ik heb vanaf het moment dat ik mijn laatste post hier gemaakt had reg exp's zitten bestuderen en ben nu ongeveer uit het volgende gekomen:
PHP:
1
<?ereg("^[\135\175\050\051\173\133a-zA-Z0-9_-]+$","[TAG]_Nick-Name{NL}(EU)"); // Match?>

Dit matched een string met op z'n minst 1 van een van de volgende karakters: [ ] ( ) { } _ - a-z A-Z 0-9. Ik moest perse escapes in octale notatie gebruiken anders wou ie niks matchen, ook moesten ze vooraan en blijkt de volgorde uit te maken. Draai ik \133 en \135 bijvoorbeeld om, dan matched ie niks.

Ik weet niet of hier een normale verklaring voor is maar 't komt bij mij over als een bug of iets dergelijks. Weet iemand hier iets vanaf? Ik gebruik 4.2.0

  • Grum
  • Registratie: Juni 2001
  • Niet online
preg_match( '!^[-A-Z0-9\\[\]\|\{\} ]+$!i', $string )

weinig problemen toch ?

als jij [-A-Z0-9\\[\]\|\{\} ] tussen double-quotes zet moet jij zelf ff eraan denken om de \ te escapen ...

  • Aphax
  • Registratie: Juli 1999
  • Laatst online: 03-06 23:32
Op vrijdag 26 juli 2002 07:03 schreef Grum het volgende:
preg_match( '!^[-A-Z0-9\\[\]\|\{\} ]+$!i', $string )

weinig problemen toch ?
Inderdaad, werkt precies zoals ik wil >:)
als jij [-A-Z0-9\\[\]\|\{\} ] tussen double-quotes zet moet jij zelf ff eraan denken om de \ te escapen ...
En dat wist ik dus niet, thanks :) Nog 1 vraagje, is dit gewoon standaard POSIX RE notatie? Ik weet namelijk niet wat die ! aan het begin en aan het einde precies inhouden.

edit: nevermind, php.net

  • Grum
  • Registratie: Juni 2001
  • Niet online
! is gewoon de delimiter (zie pcre page op php.net) je kan ook / gebruiken maar dan moet je elke keer als jij een / in je pattern gebruikt die escapen .. en daarom word vaker ! of _ gebruikt (die komen niet zo vaak in je pattern voor :)

  • Aphax
  • Registratie: Juli 1999
  • Laatst online: 03-06 23:32
Ok dan :) Hardstike bedankt voor de help Grum :)

  • Apollo_Futurae
  • Registratie: November 2000
  • Niet online
Op vrijdag 26 juli 2002 07:03 schreef Grum het volgende:
als jij [-A-Z0-9\\[\]\|\{\} ] tussen double-quotes zet moet jij zelf ff eraan denken om de \ te escapen ...
backslashes tussen enkele quotes hoor je toch ook te escapen?

Pas de replâtrage, la structure est pourrie.

Pagina: 1