Valideren kun je leren

Door EdwinG op maandag 15 juni 2009 22:17 - Reacties (16)
Categorie: -, Views: 3.496

Een veelgebruikte methode om gebruikersinvoer te controleren op bepaalde eigenschappen is het toepassen van reguliere expressies.

Maar in plaats van het probleem van onbetrouwbare invoer op te lossen, komt er in veel gevallen juist een probleem bij: Zorgen dat de validatie precies doet wat het moet doen.

Zoals ik vandaag reeds in een reactie op een ander blog heb vermeld, is het niet noodzakelijk om het wiel opnieuw uit te vinden. De meeste validaties worden immers door veel meer personen gebruikt, waardoor er vaak over nagedacht is.

Ook zijn er voldoende verzamelingen te vinden van goed bruikbare expressies, zoals bijvoorbeeld De OWASP Regex Repository.

Natuurlijk blijft hetzelfde probleem bestaan. Een enkel karakter kan een wereld van verschil maken met reguliere expressies. Denk bijvoorbeeld maar aan het weglaten of toevoegen van een ^ teken aan het begin van de expressie. Enige kennis is daarom noodzakelijk om er zeker van de zijn dat de gebruikte expressie zijn doel bereikt (en niet voorbijschiet).

Enkele belangrijke karakters/eigenschappen zijn de volgende:
  • Een ^ aan het begin van de expressie geeft aan dat de onderzochte tekst moet beginnen met het gezochte patroon.
  • Een $ aan het einde van de expressie geeft aan dat de onderzochte tekst moet eindigen met het gezochte patroon.
  • Tekens die tussen [ en ] staan: Een teken uit deze groep moet aanwezig zijn.
  • . een willekeurig karakter
  • + Het teken (of de groepering) voor de + moet minstens 1 keer voorkomen
  • * Het teken (of de groepering) voor de * mag een willekeurig aantal keer voorkomen (ook 0 keer)
  • ? Het teken voor de ? is optioneel ( 0 of 1 keer voorkomen)
  • {x,y} Het teken of de reeks voor de { } moet minstens X en maximaal Y keer voorkomen
Maar het belangrijkste is wel: Wees kritisch bij het gebruik van reguliere expressies. Als er eenvoudigere alternatieven zijn, gebruik die dan. Om bijvoorbeeld te controleren of de invoer een getal is, zal is_numeric() (php) of een dergelijke functie eenvoudiger en sneller werken.