Pregmatch spatie toestaan

  • Onderwerp starter Onderwerp starter baws
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

baws

Terugkerende gebruiker
Lid geworden
9 apr 2010
Berichten
1.258
Hallo,

Ik heb van iemand een php script om in te loggen .

Daar in staat:

elseif (!preg_match('/^[a-z\d]{2,64}$/i', $_POST['user_name']))

Dit houd in dat de gebruikersnaam geen spatie mag bevatten.

maar ik wil dat de gebruikersnaam wel een spatie mag bevatten.

Ik heb al geprobeer /s toe te voegen maar dat helpt niet.

Weet iemand hoe ik spaties toe kan staan voor de gebruikersnaam?
 
specifiek 1 spatie max? In principe staat hier letterlijk:

tussen 2 en 64 letters van type [a-z] + cijfers. Je kunt daar eenvoudig een spatie aan toevoegen, maar dat maakt " " ook een geldige username
 
Laatst bewerkt:
Ok het is voor een intern systeem hier op de zaak, en degene die gebruikers maakt moet ingelogd. maar moet ik dan van :

('/^[a-z\d]{2,64}$/i'

dit maken:
('/^[a-z " " \d]{2,64}$/i'

? heb nog nooit met pregmatch gewerkt, heb wel all de uitleg http://php.net/manual/en/function.preg-match.php bekeken maar word hier niet veel wijzer van.
 
Er zijn verschillende oplossingen

^[a-z\d]{2,64}$
^ = vanaf begin
[] = dit blok
{2,64} = 2 tot 64 keer
$ = tot einde
a-z = kleine a-z (maar de i op het einde maakt het case insensitive)
\d = decimal (0-9)

je kunt gewoon een spatie in het blok typen (haakjes niet nodig), echter is spatie-spatie-spatie dan ook een geldige naam.

als je slechts een enkele spatie toe wil staan en die mag niet op het einde kun je dat met een regex ook afdwingen. Wat jij waarschijnlijk zoekt is zoiets:

^[a-z\d][a-z \d]*[a-z\d]$

Dit laat spaties toe overal behalve het eerste en laatste teken. Maar je kunt ook exact 1 spatie toestaan e.d.
 
Ik heb het geprobeer met :

(!preg_match('/^[a-z\d][a-z \d]*[a-z\d]${2,64}$/i', $_POST['user_name']))

maar hij laat het nog steeds niet toe. ligt het aan de /i? ik weet niet waar die voor dient.
 
dat klopt, omdat je {} verkeerd staan :P als je beperking wil gebruiken moet dat op het tweede blok:

^[a-z\d][a-z \d]{0,62}[a-z\d]$

de 'i' is voor case insensitive
 
Ik snap er nu alleen maar minder van als in het begin haha.
 
Het is heel logisch hoor maar je moet het leren lezen. jouw oplossing:

^[a-z\d][a-z \d]*[a-z\d]{2,64}$

Starten met 1 teken en dat teken moet abcdefghijklmnopqrstuvwxyz0123456789 zijn.
vervolgens mogen er onbeperkt ("*") tekens zijn van bovenstaande + spatie.
Dan afsluiten met 2,64 tekens van blok 1.

mijn originele voorstel had de {2,64} niet, mijn nieuwe voorstel:

^[a-z\d][a-z \d]{0,62}[a-z\d]$

Starten met 1 teken en dat teken moet abcdefghijklmnopqrstuvwxyz0123456789 zijn.
vervolgens 0,62 van bovenstaande plus spatie
Dan afsluiten met 1 teken uit de reeks abcdefghijklmnopqrstuvwxyz0123456789
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan