Regex Swedish phone number
PTS's Swedish plan has 264 area codes; 0 is the trunk prefix and disappears with +46. A number has 7 to 9 digits after the 0: '08-123 456 78' (Stockholm), '031-123 456' (Gothenburg), '070-123 45 67' (mobile, always 9 digits). The real attempts I read are limited to mobiles: validator.js's regex refuses 078, sent.dm's assumes spaces and hyphens were stripped and accepts 077 (shared-cost), and Drupal's requires a precise layout with the hyphen and spaces. Here's a pattern covering landlines and mobiles, compared against those attempts.
/^(?:(?:\+|00)46[ -]?|0)(?:7[02-9](?:[ -]?[0-9]){7}|[1-689](?:[ -]?[0-9]){6,8})$/passes 35/35 cases
Comparison of existing patterns
| Source | pattern | Score on the corpus | ReDoS |
|---|---|---|---|
| validator.js (sv-SE) — mobiles seulement : tout fixe refusé (« 08-123 456 78 ») ; 078 refusé (le plan cite pourtant 078x) ; accepte « 46 70… » sans + | ^(\+?46|0)[\s\-]?7[\s\-]?[02369]([\s\-]?\d){7}$ | 24 / 35 | safe |
| sent.dm (guide du fournisseur, mobile national et international réunis) — suppose les espaces retirés : « 070-123 45 67 » rejeté, « 070-1234567 » aussi ; accepte 077 (partagé) ; refuse tout fixe | ^07[023679]\d{7}$|^\+467[023679]\d{7}$ | 16 / 35 | safe |
| Drupal phone (7.x-1.x, phone.se.inc) — tiret obligatoire après l'indicatif national et espaces imposés : « 070-123 45 67 » passe mais « 0701234567 » et « 070-1234567 » sont rejetés ; accepte « 099-12 34 56 » ; « +46701234567 » (collé) rejeté, « +46 70 123 45 67 » accepté | ^(([+]\d{2}[ ][1-9]\d{0,2}[ ])|([0]\d{1,3}[-]))((\d{2}([ ]\d{2}){2})|(\d{3}([ ]\d{3})*([ ]\d{2})+))$ | 24 / 35 | safe |
Implementation
const re = new RegExp("^(?:(?:\\+|00)46[ -]?|0)(?:7[02-9](?:[ -]?[0-9]){7}|[1-689](?:[ -]?[0-9]){6,8})$", "");
re.test(input);Limits
- Valide seulement la FORME : ne vérifie pas que le numéro est attribué ni que l'indicatif de zone existe : tout premier chiffre 1-6, 8 ou 9 passe, alors que le plan de PTS liste 264 indicatifs.
- Les mobiles sont acceptés pour 070, 072 à 079 (9 chiffres) ; PTS les classe comme mobiles pour 070, 072, 073, 076, 078 et 079, tandis que 074 (radiomessagerie), 075 (personnel) et 077 (partagé) passent aussi ici. Le 071 (haut débit mobile, 13 chiffres) est rejeté.
- Après +46 ou 0046, le 0 de tronc ne doit pas être gardé : « +46 070… » est rejeté. Un tiret ou une espace facultatifs sont acceptés entre deux chiffres quelconques ; parenthèses, points et extensions sont rejetés.
- Les numéros de routage et de messagerie vocale (jusqu'à 13 chiffres, comme 025x) et les codes courts (90 XYZ, 112, 113 13, 116 XYZ…) ne sont pas accepté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
- Norwegian phone number
- Polish phone number
- South African phone number
- Spanish phone number
- Swiss phone number
- UK phone number
- US phone number
- All phone numbers by country