Regex Belgian phone number
A Belgian number starts with 0 (trunk prefix, dropped with +32) followed by an area code of one digit (02 Brussels, 03 Antwerp, 04 Liège) or two digits (010 Wavre, 050 Bruges, 081 Namur) then the subscriber part: 8 digits after the 0 for a landline, 9 for a 04xx mobile. People write '02 234 56 78', '02/234.56.78' or '0475 12 34 56'. sent.dm's landline regex writes '[1-9]{1,2}': zero is excluded, so 010, 050 or 090 are refused; validator.js's covers only mobiles; Drupal's accepts 04 followed by anything. Here's a pattern bounding the start of each area code, compared against those attempts.
/^(?:(?:\+|00)32 ?|0)(?:1(?=[ ./-]?[0-69])(?:[ ./-]?[0-9]){7}|[23](?=[ ./-]?[2-8])(?:[ ./-]?[0-9]){7}|4(?=[ ./-]?[23])(?:[ ./-]?[0-9]){7}|4(?=[ ./-]?[5-9])(?:[ ./-]?[0-9]){8}|5(?:[ ./-]?[0-9]){7}|6(?=[ ./-]?[013-57-9])(?:[ ./-]?[0-9]){7}|7(?=[ ./-]?1)(?:[ ./-]?[0-9]){7}|8(?=[ ./-]?[1-79])(?:[ ./-]?[0-9]){7}|80(?=[ ./-]?[2-8])(?:[ ./-]?[0-9]){6}|800(?=[ ./-]?[1-9])(?:[ ./-]?[0-9]){5}|9(?=[ ./-]?[2-4])(?:[ ./-]?[0-9]){7})$/passes 33/33 cases
Comparison of existing patterns
| Source | pattern | Score on the corpus | ReDoS |
|---|---|---|---|
| validator.js (nl-BE, alias fr-BE) — mobiles seulement : tout fixe refusé (« 02 234 56 78 ») ; aucune espace ni séparateur (« 0475 12 34 56 » rejeté) ; accepte des préfixes inexistants (« 0400123456 » passe) | ^(\+?32|0)4\d{8}$ | 15 / 33 | safe |
| sent.dm (guide du fournisseur, fixe + mobile + 0800) — « 0[1-9]{1,2} » exclut le zéro : « 010 23 45 67 » refusé (010 Wavre) ; accepte 8 chiffres (« 02234567 ») comme 9 (« 022345678 ») ; aucun +32 ni séparateur | ^0[1-9]{1,2}[0-9]{6}$|^04[5-9][0-9]{6}$|^0800[0-9]{4}$ | 14 / 33 | safe |
| Drupal phone (7.x-1.x, phone.be.inc) — « 0 » ou +32 puis 7 ou 8 chiffres sans séparateur : « 0100000000 », « 0400000000 » et « 0912345678 » passent ; « 02 234 56 78 » rejeté ; « 0223456789 » (10 chiffres après 0 en trop) passe | ^(\+32|0)[1-9]\d{7,8}$ | 16 / 33 | safe |
Implementation
const re = new RegExp("^(?:(?:\\+|00)32 ?|0)(?:1(?=[ ./-]?[0-69])(?:[ ./-]?[0-9]){7}|[23](?=[ ./-]?[2-8])(?:[ ./-]?[0-9]){7}|4(?=[ ./-]?[23])(?:[ ./-]?[0-9]){7}|4(?=[ ./-]?[5-9])(?:[ ./-]?[0-9]){8}|5(?:[ ./-]?[0-9]){7}|6(?=[ ./-]?[013-57-9])(?:[ ./-]?[0-9]){7}|7(?=[ ./-]?1)(?:[ ./-]?[0-9]){7}|8(?=[ ./-]?[1-79])(?:[ ./-]?[0-9]){7}|80(?=[ ./-]?[2-8])(?:[ ./-]?[0-9]){6}|800(?=[ ./-]?[1-9])(?:[ ./-]?[0-9]){5}|9(?=[ ./-]?[2-4])(?:[ ./-]?[0-9]){7})$", "");
re.test(input);Limits
- Valide seulement la FORME : ne vérifie pas que le numéro est attribué. Les premiers chiffres (zones 1 à 9, mobiles 045 à 049) suivent libphonenumber ; la liste précise des indicatifs de zone est tenue par l'IBPT, dont la base d'attribution n'a pas été relue ici.
- Après +32 ou 0032, le 0 de tronc ne doit pas être gardé : « +32 02… » est rejeté. Les préfixes mobiles 040 à 044 sont rejetés, car libphonenumber ne les liste pas.
- Les numéros 070 (partagés), 078, 090x (surtaxés) et les services 1xxx ne sont pas acceptés. Le 0800 doit compter 8 chiffres au total.
- Une espace, un point, une barre oblique ou un tiret facultatifs sont acceptés entre deux chiffres quelconques ; les parenthèses et extensions sont rejetées.
Phone numbers for other countries
- Australian phone number
- Brazilian phone number
- Canadian phone number
- Chinese phone number
- Dutch phone number
- French phone number
- German phone number
- Italian phone number
- Japanese phone number
- Mexican phone number
- Norwegian phone number
- Polish phone number
- South African phone number
- Spanish phone number
- Swedish phone number
- Swiss phone number
- UK phone number
- US phone number
- All phone numbers by country