Regex Australian phone number
The ACMA, Australia's regulator, publishes numbers reserved for drama, such as 0491 570 006 for a mobile or (02) 5550 xxxx for a landline. They make good test examples because they are written the way people write them, with spaces. Yet validator.js's regex refuses '0491 570 006' because of its spaces; sent.dm's accepts only unspaced digits; and a popular blog's regex accepts '38921111' (8 digits with no area code) while refusing '+61 491 570 006'. Here's a pattern accepting separators, +61 and 1800 and 13xx numbers, compared against those attempts.
/^(?:(?:\+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})$/passes 28/28 cases
Comparison of existing patterns
| Source | pattern | Score on the 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 | safe |
| 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 | safe |
| 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 | safe |
Implementation
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);Limits
- 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.