Regex numéro de téléphone australien
L'ACMA, le régulateur australien, publie des numéros réservés aux fictions : par exemple 0491 570 006 pour un mobile ou (02) 5550 xxxx pour un fixe. Ce sont de bons exemples de test, car ils sont écrits comme les gens les écrivent, avec des espaces. Or la regex de validator.js refuse « 0491 570 006 » à cause de ses espaces ; celle de sent.dm n'accepte que des chiffres collés ; et celle d'un blog populaire accepte « 38921111 » (8 chiffres sans indicatif) tout en refusant « +61 491 570 006 ». Voici un motif qui accepte les séparateurs, +61 et les numéros 1800 et 13xx, comparé à ces tentatives.
/^(?:(?:\+61 ?4|04)(?: ?[0-9]){8}|(?:\+61 ?[2378]|0[2378]|\(0[2378]\))(?: ?[0-9]){8}|1800(?: ?[0-9]){6}|13(?: ?[0-9]){4}|1300(?: ?[0-9]){6})$/passe 28/28 cas
Comparatif des patterns existants
| Source | pattern | Score sur le corpus | ReDoS |
|---|---|---|---|
| validator.js (en-AU) — mobiles seulement : « 04 » + 8 chiffres sans la moindre espace : « 0491 570 006 » (numéro officiel de l'ACMA) est rejeté ; rejette tout fixe | ^(\+?61|0)4\d{8}$ | 14 / 28 | sûr |
| Blog Dwayne Charrington (2014) — l'indicatif régional est facultatif : « 38921111 » passe ; parenthèses non appariées acceptées (« (02 1234 5678 ») ; rejette « +61 491 570 006 » (espace après +61), les numéros 1800 et 13xx | ^\({0,1}((0|\+61)(2|4|3|7|8)){0,1}\){0,1}(\ |-){0,1}[0-9]{2}(\ |-){0,1}[0-9]{2}(\ |-){0,1}[0-9]{1}(\ |-){0,1}[0-9]{3}$ | 24 / 28 | sûr |
| sent.dm (guide du fournisseur, trois regex réunies par |) — correcte sur les chiffres (02/03/07/08, 04, 1800) mais aucun séparateur ni +61 : « 02 5550 1234 » et « +61 2 5550 1234 » rejetés | ^0[2378]\d{8}$|^04\d{8}$|^1800\d{6}$ | 14 / 28 | sûr |
Implémentation
const re = new RegExp("^(?:(?:\\+61 ?4|04)(?: ?[0-9]){8}|(?:\\+61 ?[2378]|0[2378]|\\(0[2378]\\))(?: ?[0-9]){8}|1800(?: ?[0-9]){6}|13(?: ?[0-9]){4}|1300(?: ?[0-9]){6})$", "");
re.test(input);Limites
- Valide seulement la FORME : ne vérifie pas que le numéro est attribué. Les indicatifs régionaux ne sont pas contrôlés au-delà de 02, 03, 07 et 08, ni les préfixes mobiles au-delà de 04.
- Le plan de numérotation 2025 de l'ACMA mentionnerait aussi 05 comme préfixe mobile (document relu par une source tierce, non confirmé ici) : « 0591 570 006 » est rejeté par ce motif. Les numéros 13 et 1300 et 1800 sont acceptés, mais pas les autres numéros spéciaux (190x, 12xx…).
- Les séparateurs sont limités à une espace facultative entre les chiffres ; « 02-5550-1234 » est rejeté, tout comme les parenthèses non appariées. Après +61, le 0 de tronc ne doit pas être gardé : « +61 0491… » est rejeté.
- Les numéros du corpus viennent de la liste officielle de l'ACMA, réservée aux œuvres de fiction ; les numéros 02 1234 5678 et 0412 345 678 sont les exemples de libphonenumber.