Reguliere expressies en gegevensvalidatie in formulieren
Reguliere expressies en gegevensvalidatie in formulieren
Wat zijn reguliere expressies en hoe gebruik je ze?
Een reguliere expressie, of regex, is een patroon dat een bepaalde hoeveelheid tekst beschrijft. Als je er bijvoorbeeld zeker van wilt zijn dat iemand die een formulier invult precies de gewenste tekst invoert, kun je een reguliere expressie gebruiken om een bepaald patroon in de invoer af te dwingen of om de gegevens te valideren.
Laten we als voorbeeld nemen dat u een Brits nationaal verzekeringsnummer (NIN) wilt opvragen. Dit nummer heeft een patroon van 2 tekens, gevolgd door 6 cijfers, gevolgd door nog een teken. Een reguliere expressie die overeenkomt met dit patroon zou er als volgt uitzien:
[az|AZ]{2}[0-9]{6}[az|AZ]
Hier betekent [az] "elk willekeurig kleinletterteken", [AZ] betekent "elk willekeurig hoofdletterteken", | betekent of, dus [az|AZ] betekent "elk willekeurig teken", {2} betekent "tweemaal herhalen", enzovoort.
Sommige overheden bieden reguliere expressies aan voor veelgebruikte patronen. Zie bijvoorbeeld dit Wikipedia- artikel over Britse postcodes.
Voor een snel overzicht van reguliere expressies kunt u zoeken naar een 'Handleiding voor reguliere expressies' of verder lezen.
Karakter | Legende | Voorbeeld | Voorbeeldovereenkomst |
|---|---|---|---|
\D | De meeste motoren: één cijfer | bestand_\d\d | bestand_25 |
\D | .NET, Python 3: één Unicode-cijfer in elk script | bestand_\d\d | bestand_9੩ |
\w | De meeste engines: "woordteken": ASCII-letter, cijfer of underscore | \w-\w\w\w | A-b_1 |
\w | .Python 3: "woordteken": Unicode-letter, ideogram, cijfer of underscore | \w-\w\w\w | 字-ま_۳ |
\w | .NET: "woordteken": Unicode-letter, ideogram, cijfer of verbindingsteken | \w-\w\w\w | 字-ま‿۳ |
\S | De meeste engines: "witruimtekarakter": spatie, tab, nieuwe regel, wagenretour, verticale tab | a\sb\sc | ab |
\S | .NET, Python 3, JavaScript: "witruimtekarakter": elk Unicode-scheidingsteken | a\sb\sc | ab |
\D | Eén teken dat geen cijfer is volgens de definitie van uw engine \d | \D\D\D | abc |
\W | Eén teken dat geen woordteken is zoals gedefinieerd door de \w- functie van uw engine. | \W\W\W\W\W | *-+=) |
\S | Eén teken dat geen witruimteteken is zoals gedefinieerd door de \s van uw engine. | \S\S\S\S | Jojo |
Kwantoren
Kwantificator | Legende | Voorbeeld | Voorbeeldovereenkomst |
|---|---|---|---|
+ | Een of meer | Versie \w-\w+ | Versie A-b1_1 |
{3} | Precies drie keer | \D{3} | abc |
{2,4} | Twee tot vier keer | \d{2,4} | 156 |
{3,} | Drie of meer keer | \w{3,} | regex_tutorial |
* | Nul of meer keer | ABC* | AAACC |
? | Eenmalig of nooit | meervoud? | meervoud |
Meer personages
Karakter | Legende | Voorbeeld | Voorbeeldovereenkomst |
|---|---|---|---|
. | Elk teken behalve een regeleinde. | ac | abc |
. | Elk teken behalve een regeleinde. | .* | Ach ja, maakt niet uit. |
\ . | Een punt (speciaal teken: moet worden voorafgegaan door een \) | a\.c | ac |
\ | Ontsnapt aan een speciaal personage | \.\*\+\? \$\^\/\\ | .*+? $^/\ |
\ | Ontsnapt aan een speciaal personage | \[\{\(\)\}\] | [{()}] |
Logica
Logica | Legende | Voorbeeld | Voorbeeldovereenkomst |
|---|---|---|---|
| | Alternatie / OF-operand | 22|33 | 33 |
( … ) | Opnamegroep | A(nt|apple) | Apple (een woordspeling op "pple") |
\1 | Inhoud van Groep 1 | r(\w)g\1x | reguliere expressie |
\2 | Inhoud van Groep 2 | (\d\d)\+(\d\d)=\2\+\1 | 12+65=65+12 |
(?: … ) | Niet-vangende groep | A(?:nt|pple) | Appel |
Meer witruimte
Karakter | Legende | Voorbeeld | Voorbeeldovereenkomst |
|---|---|---|---|
\T | Tab | T\t\w{2} | Tab |
\R | Wagenretourteken | zie hieronder | |
\N | Regeleinde-teken | zie hieronder | |
\r\n | Regelscheider in Windows | AB\r\nCD | AB |
\N | Perl, PCRE (C, PHP, R…): één teken dat geen regeleinde is | \N+ | abc |
\H | Perl, PCRE (C, PHP, R…), Java: één horizontaal witruimteteken: tab of Unicode-spatie als scheidingsteken. | ||
\H | Eén teken dat geen horizontale spatie is. | ||
\v | .NET, JavaScript, Python, Ruby: verticaal tabblad | ||
\v | Perl, PCRE (C, PHP, R…), Java: één verticaal witruimteteken: regeleinde, wagenretour, verticale tab, formulierdoorvoer, alinea- of regelafscheider | ||
\V | Perl, PCRE (C, PHP, R…), Java: elk teken dat geen verticale spatie is | ||
\R | Perl, PCRE (C, PHP, R…), Java: één regelovergang (carriage return + line feed-combinatie, en alle tekens die overeenkomen met \v) |
Meer kwantoren
Kwantificator | Legende | Voorbeeld | Voorbeeldovereenkomst |
|---|---|---|---|
+ | De + (één of meer) staat voor "hebzuchtig". | \d+ | 12345 |
? | Maakt kwantoren "lui". | \d+? | 1 op 1 2345 |
* | De * (nul of meer) is "hebzuchtig". | A* | AAA |
? | Maakt kwantoren "lui". | A*? | leeg in AAA |
{2,4} | Twee tot vier keer, "hebzuchtig" | \w{2,4} | abcd |
? | Maakt kwantoren "lui". | \w{2,4}? | ab in ab cd |
Personageklassen
Karakter | Legende | Voorbeeld | Voorbeeldovereenkomst |
|---|---|---|---|
[ … ] | Een van de tekens tussen haakjes | [AEIOU] | Eén hoofdletterklinker |
[ … ] | Een van de tekens tussen haakjes | Top | Tik of Top |
- | Bereikindicator | [az] | Eén kleine letter |
[xy] | Een van de tekens in het bereik van x tot y | [AZ]+ | GEWELDIG |
[ … ] | Een van de tekens tussen haakjes | [AB1-5w-z] | Een van de volgende opties: A, B, 1, 2, 3, 4, 5, w, x, y, z |
[xy] | Een van de tekens in het bereik van x tot y | [ -~]+ | Tekens in het afdrukbare gedeelte van de ASCII-tabel . |
[^x] | Eén teken dat geen x is | [^az]{3} | A1! |
[^xy] | Een van de tekens ligt niet binnen het bereik van x tot y. | [^ -~]+ | Tekens die niet voorkomen in het afdrukbare gedeelte van de ASCII-tabel . |
[\d\D] | Een teken dat een cijfer of een niet-cijfer is. | [\d\D]+ | Alle personages, inclusief- |
[\x41] | Komt overeen met het teken op hexadecimale positie 41 in de ASCII-tabel, oftewel de letter A. | [\x41-\x45]{3} | ABE |
Ankers en grenzen
Anker | Legende | Voorbeeld | Voorbeeldovereenkomst |
|---|---|---|---|
^ | Begin van de tekenreeks of begin van de regel, afhankelijk van de modus voor meerdere regels. (Maar wanneer [^inside brackets], betekent dit "niet"). | ^abc .* | abc (begin van de regel) |
$ | Einde van de tekenreeks of einde van de regel, afhankelijk van de modus voor meerdere regels. Veel subtiliteiten die per engine verschillen. | .*? het einde$ | dit is het einde |
\A | Begin van de string | \Aabc[\d\D]* | abc (string... |
\z | Helemaal aan het einde van de snaar | het einde\z | dit is...\n... het einde |
\Z | Einde van de tekenreeks of (behalve in Python) vóór de laatste regelafbreking | het einde\Z | Dit is...\n... het einde \n |
\G | Begin van de tekenreeks of einde van de vorige overeenkomst | ||
\B | Woordgrens | Bob.*\bcat\b | Bob heeft de kat opgegeten |
\B | Woordgrens | Bob.*\b\кошка\b | Bob at de koshka |
\B | c.*\Bcat\B.* | navolgers |