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}$/

Lees ook

The bullshit of implementing web accessibility

Do you retroactively apply web accessibility (WCAG) to your apps, or is it already on your backlog for this sprint? Then you need to read this article. We – all frontend developers – are approaching WCAG completely wrong. It’s part of our job, but we treat it as an afterthought. Stop the bullshit about being EAA-compliant and make accessibility a real part of your work.

Continue reading

The bullshit of frontend development

Do you ever feel like the frontend of every website and application has become increasingly complex over time? In the past, we built everything using CSS, HTML, and a little bit of JavaScript, but now everything is done with Angular, React, or Vue, with just a bit of CSS and HTML. What has changed, and is this shift actually a positive one?

Continue reading

How I added my Porsche EV to Homekit

Since my childhood, I have been passionate about cars and everything related to them. Even at a young age, I knew every model. I spent hours flipping through car magazines searching for new facts and always dreamed of owning an exotic car. Initially, I used to dream of owning a Ferrari, but as I grew older and wiser,…

Continue reading