Rexact
Cheatsheet

Regex Dutch phone number

A Dutch number has 10 digits including the trunk 0: a 2- or 3-digit netnummer (010 Rotterdam, 070 The Hague, 0222 Texel) followed by the subscriber part for a landline, or 06 then 8 digits for a mobile. With +31, the 0 disappears. The real attempts I read go wrong in different ways: sent.dm's landline regex only requires 9 digits in total (so '012345678' passes and a real 10-digit landline fails), its mobile regex accepts a comma ('06,1234567'), jquery-validation's accepts 060, 066, 08 and 09, and validator.js's covers only mobiles. Here's a pattern separating landlines, mobiles, 085/088 and 0800/090x numbers, compared against those attempts.

/^(?:(?:\+|00)31 ?|0)(?:[1-57](?:[ -]?[0-9]){8}|6(?=[ -]?[1-58])(?:[ -]?[0-9]){8}|8(?=[ -]?[4578])(?:[ -]?[0-9]){8}|800(?:[ -]?[0-9]){4,7}|90[069](?:[ -]?[0-9]){4,7})$/
passes 36/36 cases

Comparison of existing patterns

Implementation

const re = new RegExp("^(?:(?:\\+|00)31 ?|0)(?:[1-57](?:[ -]?[0-9]){8}|6(?=[ -]?[1-58])(?:[ -]?[0-9]){8}|8(?=[ -]?[4578])(?:[ -]?[0-9]){8}|800(?:[ -]?[0-9]){4,7}|90[069](?:[ -]?[0-9]){4,7})$", "");
re.test(input);

Limits

  • Valide seulement la FORME : ne vérifie pas que le numéro est attribué ni que le netnummer existe : tout 0 suivi de 1 à 5 ou de 7 passe, la liste des netnummers (141 régions) étant tenue par le ministère et l'ACM.
  • Après +31 ou 0031, le 0 de tronc ne doit pas être gardé : « +31 06… » est rejeté, de même que la forme « +31 (0)6… » encore courante aux Pays-Bas. Retirez le « (0) » avant validation.
  • Les longueurs et les premiers chiffres (mobile 061 à 065 et 068, fixe 1 à 5 et 7, 08x, 090x) viennent des métadonnées de libphonenumber, pas de la page de l'ACM, qui ne les donne pas. Les 066 (pagers), 067, 069, 091 et 097 sont rejetés.
  • Une espace ou un tiret facultatifs sont acceptés entre deux chiffres quelconques ; les parenthèses, points et extensions sont rejetés.

Phone numbers for other countries

Related pages