Voorbeelden van Reguliere Expressies

Middels een zogenaamde Reguliere Expressie ( REGEXP) kan worden afgedwongen dat, in geval van input, een formulierveld alleen specifieke tekens kan bevatten, of dat de invoer aan een specifiek formaat voldoet.

Binnen de formulierenserver kunnen reguliere expressies worden gebruikt door bij de eigenschappen van invoer controls (in de validatie tab) deze in te voeren.

Voor een volledig overzicht van REGEXP wordt verwezen naar bijv. http://www.regular-expressions.info/ of http://www.freeformatter.com/regex-tester.html, maar er zijn nog veel meer sites ( vaak ook met specifieke voorbeelden voor controle op bijv. IBAN nummers, emailadres etc.). Dit soort sites biedt vaak ook de mogelijkheid om een expressie te controleren op juiste werking.

Dit hoofdstuk geeft een aantal basis voorbeelden voor gebruik van reguliere expressies.

Een reguliere expressie beschrijft het formaat van een veld, door het toepassen van tekenreeksen die beschrijven waaraan de input moet voldoen.

Een . staat voor een willekeurig teken. Een specifiek karakter staat voor dat karakter zelf. Als .e zou worden ingevoerd als reguliere expressie voor validatie van input dan is de, je, ge, me etc. correcte invoer. Ka, pa , la , nu etc. zal worden afgekeurd.
Vierkante haken geven een lijst van tekens aan. .[aeo] als validatie staat, naast de, je, ge, me (uit vorige voorbeeld) nu ook ka, pa en la toe, alsmede po, go etc.
nu wordt nog steeds afgekeurd.

Door gebruik te maken van een minteken binnen de vierkante haken kan een reeks worden aangeduid. Binnen de vierkante haken kunnen meerdere reeksen worden ingevoerd. [a-zA-Z] staat invoer van elke lowercase en uppercase letter toe.[0-9] staat invoer van cijfers toe.

Een ^ als eerste teken binnen de vierkante haken verandert de toegestane waarden in het omgekeerde. [^0-9] staat alles toe wat geen cijfer is.

In de bovenstaande voorbeelden wordt per positie beschreven waaraan input moet voldoen.
.[0-9][0-9][ABC] beschrijft dus input van 4 tekens. Het eerste teken mag alles zijn, het tweede en derde teken een cijfer en het vierde teken dient een A, B of C te zijn.

Door middel van het opnemen van zogenaamde anchors kunnen ook meerdere posities worden aangeduid. Speciale anchors zijn ^ ( begin van de input ) en $, einde van de input
Met ^[ABC]{3} kan worden aangegeven dat er iets van ongedefinieerde lengte kan worden ingevoerd , 1e 3 posities dienen altijd te bestaan uit alleen de tekens A , B of C. BBB is dus correct , CBAFFF ook, maar A, DAB en FFFFFFF zijn incorrect.

Met ^[ABC]{3}$ kan worden aangegeven dat er iets van 3 posities lengte kan worden ingevoerd , 1e 3 posities dienen altijd te bestaan uit alleen de tekens A , B of C. BBB is dus correct , CBA ook, maar A, CBAFFF, DAB en FFFFFFF zijn incorrect

Combinaties zijn mogelijk. ^[0-9]{4}[A-Z]{2}$ is bijvoorbeeld geschikt om een NL postcode ( zonder spatie tussen cijfer en letterdeel) te valideren. Input in het formaat 9999AA voldoet hier dus aan.

Voor het controleren van speciale characters, tabs etc. wordt gebruikt gemaakt van specifieke tekens. \s controleert bijvoorbeeld op een spatie, \f op een formfeed, \n op een line feed, \t een tab etc.
Ook zijn er manieren om aan te geven dat een teken 0, 1 of meerdere keren mag voorkomen.
Een ‘*’ achter een teken betekent dat dat teken 0, 1 of meerdere keren mag voorkomen. Een ‘+’ achter een teken betekent dat een teken 1 of meerdere keren mag voorkomen.

^[0-9]{4} +[A-Z]{2}$ valideert bijvoorbeeld op geldige input voor een NL postcode met tenminste 1 verplichte spatie tussen cijfer en letterdeel. Input in het formaat 9999 AA voldoet hier dus aan, 9999 AA ook etc.

^[0-9]{4}[\s]{1}[A-Z]{2}$ valideert bijvoorbeeld op geldige input voor een NL postcode met exact 1 spatie tussen cijfer en letterdeel. Input in het formaat 9999 AA voldoet hier dus aan, 9999AA en 9999 AA niet.

^[0-9]{4}[\s]{1}[a-zA-Z]{2}$ valideert bijvoorbeeld op geldige input voor een NL postcode met exact 1 spatie tussen cijfer en letterdeel en waarbij het letterdeel in lower of uppercase mag worden ingevoerd. Input in het formaat 9999 aa, 9999 Aa etc. voldoet hier dus aan.

^[0-9]{4} *[A-Z]{2}$ valideert bijvoorbeeld op geldige input voor een NL postcode zonder een spatie tussen cijfer en letterdeel. Maar als er 1 of meerdere tekens worden opgenomen tussen cijfer en letterdeel dan moet dat wel een spatie zijn. Input in het formaat 9999AA, 9999 AA, 9999 AA etc. voldoet hier dus allemaal aan.

Tenslotte nog de mogelijkheid om verschillende mogelijkheden voor invoer op een positie te kunnen valideren. Daartoe kan het ‘|’ symbool worden gebruikt.
Bijv. ^(AA|BB|CC|DD|[0-5])$ geeft aan dat geldige invoer AA, BB, CC, DD of een getal van 0 t/m 5 is.

Een laatste, nuttig voorbeeld (omdat de formulierenserver nog niet over zo’n specifiek control beschikt) is controle op een ingevoerde tijd. Je wilt dan afdwingen dat iemand de tijd invoert en dan iets als 25:77 of -0:99 niet valide is.
Een reguliere expressie die dat afdwingt is ^(?:[01]?\d|2[0-3]):[0-5]\d(?::[0-5]\d)?$


Tot zover de uitleg over de basis principes van reguliere expressies. Er bestaan uiteraard nog veel meer mogelijkheden. Zonder hier verder op in te gaan is bijv. ook interessant de mogelijkheid om de input ook op te maken na validatie. Bijvoorbeeld de voorbeelden over de postcode kunnen zo worden uitgebreid dat uiteindelijk op het scherm 4 cijfers een spatie en twee hoofdletters worden weergegeven, ook al is er bij invoer geen spatie gebruikt en is het letterdeel in lowercase ingevoerd.

Let er op dat voor het gebruik van reguliere expressies verschillende varianten bestaan. Niet alle varianten zijn uitwisselbaar met elkaar.