Regex Norwegian phone number
Norway has a closed 8-digit plan with no trunk prefix: you always dial all 8 digits, with or without +47. A landline starts with 2, 3, 5, 6 or 7, a mobile with 4 or 9, toll-free numbers with 800 or 801. People write '22 12 34 56' (landline) or '400 12 345' (mobile). validator.js's mobile regex accepts '40' to '49' and every 9x; sent.dm's landline regex writes '[2-3,5-7]': the comma is a literal character, so ',2' prefixes pass; CakePHP's accepts any 8 digits. Here's a pattern bounding the first two digits, compared against those attempts.
/^(?:(?:\+|00)47 ?)?(?:(?:2[1-4]|3[1-3578]|5[1-35-7]|6[1-46-9]|7[0-8]|4[0156-8]|9[0-9])(?:[ -]?[0-9]){6}|(?:80[01]|810|82[09]|85[0-5]|880)(?:[ -]?[0-9]){5})$/passes 34/34 cases
Comparison of existing patterns
| Source | pattern | Score on the corpus | ReDoS |
|---|---|---|---|
| validator.js (nb-NO) — mobiles seulement : tout fixe refusé (« 22123456 ») ; aucun séparateur (« 400 12 345 » et « 49 123 456 » rejetés) ; accepte tout 4x et 9x (« 49123456 ») | ^(\+?47)?[49]\d{7}$ | 16 / 34 | safe |
| sent.dm (guide du fournisseur, mobile + fixe) — « [2-3,5-7] » contient une virgule littérale (« ,2123456 » passe) ; accepte 20, 30, 50, 60, 70 sans contrôle du 2e chiffre ; ni +47 ni séparateur | ^(4[0-8]|9\d)\d{6}$|^([2-3,5-7]\d)\d{6}$ | 17 / 34 | safe |
| CakePHP localized (NoValidation::phone) — 8 chiffres quelconques (« 00000000 », « 12345678 ») ou 3 formats d'espaces ; aucun +47 | ^((\d{8})|(\d{3} \d{2} \d{3})|(\d{2} \d{2} \d{2} \d{2}))$ | 23 / 34 | safe |
Implementation
const re = new RegExp("^(?:(?:\\+|00)47 ?)?(?:(?:2[1-4]|3[1-3578]|5[1-35-7]|6[1-46-9]|7[0-8]|4[0156-8]|9[0-9])(?:[ -]?[0-9]){6}|(?:80[01]|810|82[09]|85[0-5]|880)(?:[ -]?[0-9]){5})$", "");
re.test(input);Limits
- Valide seulement la FORME : ne vérifie pas que le numéro est attribué. Seuls les deux premiers chiffres sont contrôlés (liste de libphonenumber), pas la tranche exacte attribuée à un opérateur par Nkom.
- Il n'y a pas de préfixe de tronc : les 8 chiffres se composent toujours, donc « +47 0 22… » est rejeté. Les numéros à 5 chiffres (02000, 0[235-9]xxx) et 04x (42, 43, 44 non alloués) sont rejetés.
- Les préfixes mobiles 40, 41, 45 à 48 et tous les 9x sont acceptés ; 42, 43 et 44 sont rejetés comme dans libphonenumber. Le plan complet de Nkom n'a pas été relu.
- Une espace ou un tiret facultatifs sont acceptés entre deux chiffres quelconques après les deux premiers (« 22 1 2 3 4 5 6 » passe) ; parenthèses, points et extensions sont rejetés.
Phone numbers for other countries
- Australian phone number
- Belgian 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
- 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