Regex UK phone number
Ofcom publishes fictional numbers reserved for drama, such as 020 7946 0xxx or 07700 900xxx. They make good test examples because they have the real numbering-plan structure. jquery-validation's strictest regex (phonesUK) nevertheless rejects them as soon as you leave fixed lines and mobiles: it deliberately excludes 08 and 09, so '08081 570123' (fictional freephone) and '0909 8790123' (fictional premium rate) fail, as do 070 personal numbers. validator.js's mobile regex refuses every landline. Here's a pattern following Ofcom's prefixes (01, 02, 03, 05, 07, 08, 09), with +44 dropping the trunk 0, compared against those attempts.
/^(?:(?:\+44|0044)[ -]?|0)(?:(?=(?:[ -]?[0-9]){10}$)(?:7[1-57-9]|7624|70|55|56)(?:[ -]?[0-9])+|(?=(?:[ -]?[0-9]){9,10}$)[12389](?:[ -]?[0-9])+)$/passes 35/35 cases
Comparison of existing patterns
Implementation
const re = new RegExp("^(?:(?:\\+44|0044)[ -]?|0)(?:(?=(?:[ -]?[0-9]){10}$)(?:7[1-57-9]|7624|70|55|56)(?:[ -]?[0-9])+|(?=(?:[ -]?[0-9]){9,10}$)[12389](?:[ -]?[0-9])+)$", "");
re.test(input);Limits
- Valide seulement la FORME : ne vérifie pas que le numéro est alloué. Les plages 01 et 02 acceptent n'importe quel indicatif de zone (« 01234 567890 » passe) : seule l'annexe A du plan d'Ofcom, que ce motif ne reprend pas, liste les indicatifs réels.
- Les longueurs (9 ou 10 chiffres après le 0 de tronc, exactement 10 pour les préfixes mobiles, 055, 056 et 070) viennent des métadonnées de libphonenumber, pas du plan d'Ofcom, qui ne les donne pas. Le 076 (radiomessagerie) est exclu, sauf 07624 (île de Man).
- Accepte espace ou tiret facultatifs entre les chiffres, mais ni parenthèses (« (020) 7946 0123 ») ni extension (« x123 ») : retirez-les avant validation. Après +44 ou 0044, le 0 de tronc ne doit pas être gardé (« +44 020… » est rejeté).
- Les numéros du corpus sont les numéros fictifs officiels d'Ofcom (copie Wayback de la page « numbers for drama ») : utilisables librement dans des tests, contrairement à de vrais numéros.