Nederlandse reguliere expressies

Nederlandse reguliere expressies

Een reguliere expressie biedt een gestructureerde methode om patronen te definiëren waarmee een computer tekst kan identificeren. Deze methodiek volgt een formele syntaxis, die deels gestandaardiseerd is. Reguliere expressies worden breed toegepast, bijvoorbeeld op websites en in webapplicaties, voor het valideren van e-mailadressen en postcodes. Zo wordt bijvoorbeeld een e-mailadres gecontroleerd op de aanwezigheid van alle vereiste patronen. Hieronder volgen diverse onmisbare reguliere expressies voor Nederlandstalige websites. Deze expressies zijn als voorbeeld in een JavaScript-methode opgesteld, maar ze zijn toepasbaar in verschillende programmeertalen.

Snel naar:

  1. E-mailadressen valideren
  2. URL valideren
  3. Website URL valideren
  4. Adres valideren
  5. Postcode valideren
  6. Telefoonnummer valideren
  7. IBAN valideren

E-mailadressen valideren

Het valideren van een e-mailadres is een uitdaging. Hoewel we met behulp van een reguliere expressie kunnen controleren of een e-mailadres de juiste syntactische patronen volgt, kunnen we niet met zekerheid zeggen of het ingevoerde e-mailadres ook daadwerkelijk bestaat. Neem bijvoorbeeld "maxima@hetkoningshuis.nl", dit adres kan correct zijn qua syntax, maar het is zeer waarschijnlijk niet echt in gebruik.

Een reguliere expressie stelt ons dus alleen in staat om te verifiëren of de syntax van een e-mailadres correct is. Hieronder vind je een voorbeeld van een reguliere expressie in JavaScript die een e-mailadres valideert.

const validateEmail = (email) => {
    const regex = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
    return regex.test(email);
}

Direct kopiëren: /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i

Bij het bouwen van een webapplicatie bestaat er ook een alternatieve methode om de geldigheid van een e-mailadres te controleren. Door een HTML5 e-mailinvoerveld op een website te gebruiken, zal de browser automatisch de validatie van het e-mailadres uitvoeren.

<form>
    <input type="email">
    <input type="submit">
</form>

Website URL valideren

Het valideren van een website-URL is net zo uitdagend als het valideren van een e-mailadres. Er zijn diverse patronen die een URL kan aannemen. Bijvoorbeeld: "www.website.nl", "website.nl", "https://website.nl", en "http://website.nl". Al deze notaties kunnen verwijzen naar dezelfde website, maar worden op vier verschillende manieren geschreven. Let op! Een URL is niet alleen een link naar een website, maar kan ook een link zijn naar de ftp-server (ftp://), een telefoonnummer (tel:) of een e-mailadres (mailto:)

URL valideren

Om URL's te valideren, kan de onderstaande code worden gebruikt:

const validateURL = (url) => {
    const regex = ^(?!mailto:)(?:(?:http|https|ftp)://)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$;
    return regex.test(url);
}

Direct kopiëren: ^(?!mailto:)(?:(?:http|https|ftp)://)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$

Website URL valideren

Om website URL's te valideren, kan de onderstaande code worden gebruikt:

const validateWebsiteURL = (url) => {
    const regex = /(https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]+\.[^\s]{2,}|www\.[a-zA-Z0-9]+\.[^\s]{2,})/gi;
    return regex.test(url);
}

Direct kopiëren: /(https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]+\.[^\s]{2,}|www\.[a-zA-Z0-9]+\.[^\s]{2,})/gi

Evenals bij het valideren van een e-mailadres, kan ook de browser worden ingezet om een URL te valideren. Dit kan worden bereikt door een invoerveld van het type "url" in de HTML op te nemen.

<form>
    <input type="url">
    <input type="submit">
</form>

Nederlandse adressen valideren

Het valideren van een Nederlands adres kan ook effectief worden gedaan met behulp van een reguliere expressie. Een adres bestaat typisch uit de naam van een straat en een huisnummer. Soms omvat het huisnummer een toevoeging of bestaat het uit meerdere nummers. Met de onderstaande reguliere expressie kunnen Nederlandse adressen worden gevalideerd:

const validateAddress = (address) => {
    const regex = /^([1-9][e][\s])*([a-zA-Z]+(([\.][\s])|([\s]))?)+[1-9][0-9]*(([-][1-9][0-9]*)|([\s]?[a-zA-Z]+))?$/i;
    return regex.test(address);
}

Direct kopieren: /^([1-9][e][\s])*([a-zA-Z]+(([\.][\s])|([\s]))?)+[1-9][0-9]*(([-][1-9][0-9]*)|([\s]?[a-zA-Z]+))?$/i

Nederlandse postcodes valideren

Een Nederlandse postcode valideren is vergeleken met het valideren van een e-mailadres minder moeilijk. Het patroon van een postcode wat bestaat uit 4 cijfers en 2 letters is gemakkelijk te valideren. Onderstaand staat een voorbeeld van een reguliere expressie om een postcode te valideren.

const validateZipcode = (zipcode) => {
    const regex = /^[1-9][0-9]{3}[\s]?[A-Za-z]{2}$/i;
    return regex.test(zipcode);
}

Direct kopiëren: /^[1-9][0-9]{3}[\s]?[A-Za-z]{2}$/i

Deze reguliere expressie valideert zowel postcodes met het patroon: 4 cijfers en 2 letters als 4 cijfers een spatie en 2 letters.

Nederlandse telefoonnummers valideren

Er bestaan twee verschillende typen telefoonnummers: mobiele nummers en vaste nummers. Mobiele nummers volgen doorgaans een ander patroon dan vaste telefoonnummers. Om deze reden moet een telefoonnummer dubbel worden gevalideerd; als een van de patronen wordt herkend, kan worden aangenomen dat het om een geldig telefoonnummer gaat. Hieronder wordt aangegeven hoe een telefoonnummer kan worden gevalideerd in een functie:

const validatePhone = (phone) => {
    const vast_nummer = /^(((0)[1-9]{2}[0-9][-]?[1-9][0-9]{5})|((\\+31|0|0031)[1-9][0-9][-]?[1-9][0-9]{6}))$/;
    const mobiel_nummer = /^(((\\+31|0|0031)6){1}[1-9]{1}[0-9]{7})$/i;
    return (vast_nummer.test(phone) || mobiel_nummer.test(phone));
}

Direct kopiëren: /^(((0)[1-9]{2}[0-9][-]?[1-9][0-9]{5})|((\\+31|0|0031)[1-9][0-9][-]?[1-9][0-9]{6}))$/
Direct kopiëren /^(((\\+31|0|0031)6){1}[1-9]{1}[0-9]{7})$/i

IBAN bankrekeningnummer valideren

Het valideren van een IBAN rekeningnummer kan ook worden gedaan met behulp van een reguliere expressie. IBAN-bankrekeningnummers volgen een vastgesteld patroon dat overeenkomt met de internationale standaard.

const validateIban = (iban) => {
    const regex = /^[a-zA-Z]{2}[0-9]{2}[a-zA-Z0-9]{4}[0-9]{7}([a-zA-Z0-9]?){0,16}$/i;
    return regex.test(iban);
}

Direct kopiëren: /^[a-zA-Z]{2}[0-9]{2}[a-zA-Z0-9]{4}[0-9]{7}([a-zA-Z0-9]?){0,16}$/

Neem deel aan de discussie

  • Peter geplaatst op 8 september 2020

    Fijn overzicht! Misschien ook handig om een regex toe te voegen voor validatie van kentekens of BSN-nummers?

  • Louis geplaatst op 24 april 2022

    Goede uitleg, alleen let op: de IBAN-validatie checkt alleen het patroon, niet of het rekeningnummer echt bestaat of bij een bestaande bank hoort.

  • Dhruv01 geplaatst op 4 september 2025

    Erg handige blog Jasper! De postcode- en e-mailvalidatie kopieer ik vaak.

Laat een reactie achter

Lees ook

10 JavaScript one-liners every developer should know

Code should be readable and pragmatic. For me, that means when I look at a piece of code, I should almost instantly understand what it does. Clear code always has good variable names, is predictable, avoids unnecessary logic, and lives in the right place within a project. But sometimes you need to do something a little complex without turning the rest of your code into a mess. That’s where one-liners come in. Small, pragmatic snippets…

Continue reading

The difference between debounce and throttle

Debounce and throttle are powerful techniques, but only if you really understand what they do. I often ask about them in tech interviews, and to my surprise, many developers (even seniors) struggle to explain the difference. The good news is: it’s actually quite simple. In this post, I’ll break down both techniques and share some practical use cases. If you are unfamiliar with the techniques and are asked about them too in your interview…

Continue reading

The paradox of AI in web development

Since the start of my career as a developer, I’ve seen a lot of changes. From the rise of Dreamweaver with a WYSIWYG editor for generating table code to the arrival of jQuery and professional frameworks that completely transformed web development. Nowadays, there seems to be only one buzzword everywhere: AI.…

Continue reading