Regex numéro de téléphone norvégien
La Norvège a un plan fermé à 8 chiffres, sans préfixe de tronc : on compose toujours les 8 chiffres, avec ou sans +47. Un fixe commence par 2, 3, 5, 6 ou 7, un mobile par 4 ou 9, les numéros gratuits par 800 ou 801. On écrit « 22 12 34 56 » (fixe) ou « 400 12 345 » (mobile). La regex mobile de validator.js accepte tout 4x et tout 9x ; celle de sent.dm pour les fixes écrit « [2-3,5-7] » : la virgule est un caractère littéral, donc « ,2123456 » passe ; celle de CakePHP accepte n'importe quels 8 chiffres. Voici un motif qui borne les deux premiers chiffres, comparé à ces tentatives.
/^(?:(?:\+|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})$/passe 34/34 cas
Comparatif des patterns existants
| Source | pattern | Score sur le 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 | sûr |
| 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 | sûr |
| 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 | sûr |
Implémentation
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);Limites
- 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.
Numéros de téléphone d’autres pays
- numéro de téléphone allemand
- numéro de téléphone américain
- numéro de téléphone australien
- numéro de téléphone belge
- numéro de téléphone brésilien
- numéro de téléphone britannique
- numéro de téléphone canadien
- numéro de téléphone chinois
- numéro de téléphone espagnol
- numéro de téléphone français
- numéro de téléphone italien
- numéro de téléphone japonais
- numéro de téléphone mexicain
- numéro de téléphone néerlandais
- numéro de téléphone polonais
- numéro de téléphone sud-africain
- numéro de téléphone suédois
- numéro de téléphone suisse
- Tous les numéros de téléphone par pays