Regex German phone number
A German number is written as 0, then a local-network area code of 2 to 5 digits (030 Berlin, 069 Frankfurt, 0221 Cologne), then the subscriber part, with no fixed length: 5 to 15 digits after the 0. Mobiles have a 015x, 016x or 017x prefix followed by 7 to 9 digits. With +49, the leading 0 disappears. The Bundesnetzagentur publishes fictional numbers for media use, such as 030 23125 000 to 999 or 0171 39200 00 to 99: they make good test examples. validator.js's mobile regex refuses them as soon as there is a space, sent.dm's accepts neither +49 nor separators, and CakePHP's even accepts the empty string. Here's a pattern telling mobiles, landlines and special numbers apart, compared against those attempts.
/^(?:(?:\+49|0049) ?|0)(?:(?:15[0-25-9](?:[ /-]?[0-9]){8}|1(?:6[023]|7[0-9])(?:[ /-]?[0-9]){7,8})|(?![78]0[01]|709|90[0-5])[2-9](?:[ /-]?[0-9]){4,14}|800(?:[ /-]?[0-9]){7,12}|180(?:[ /-]?[0-9]){5,11}|700(?:[ /-]?[0-9]){8}|900(?:[ /-]?[135](?:[ /-]?[0-9]){6}|[ /-]?9(?:[ /-]?[0-9]){7}))$/passes 35/35 cases
Comparison of existing patterns
Implementation
const re = new RegExp("^(?:(?:\\+49|0049) ?|0)(?:(?:15[0-25-9](?:[ /-]?[0-9]){8}|1(?:6[023]|7[0-9])(?:[ /-]?[0-9]){7,8})|(?![78]0[01]|709|90[0-5])[2-9](?:[ /-]?[0-9]){4,14}|800(?:[ /-]?[0-9]){7,12}|180(?:[ /-]?[0-9]){5,11}|700(?:[ /-]?[0-9]){8}|900(?:[ /-]?[135](?:[ /-]?[0-9]){6}|[ /-]?9(?:[ /-]?[0-9]){7}))$", "");
re.test(input);Limits
- Valide seulement la FORME : ne vérifie pas que le numéro est attribué ni que l'indicatif de réseau local existe : tout indicatif de 3 chiffres de 2xx à 9xx passe, la liste réelle (plusieurs milliers d'indicatifs) étant publiée par la Bundesnetzagentur.
- Les longueurs (5 à 15 chiffres après le 0 pour un fixe, 11 pour un mobile 015x, 10 ou 11 pour 016x et 017x) viennent des métadonnées de libphonenumber, pas de la Mitteilung 148/2021, qui ne donne que les plages fictives. Le préfixe 0153 (quasi inutilisé) est rejeté.
- Après +49 ou 0049, le 0 de tronc ne doit pas être gardé : « +49 030… » est rejeté, de même que la forme « +49 (0) 30… » encore courante en Allemagne. Les parenthèses autour de l'indicatif (« (030) 23125123 ») sont rejetées : retirez-les avant validation.
- Une espace, une barre oblique ou un tiret facultatifs sont acceptés entre deux chiffres quelconques : « 03 0 23125 1 23 » passe, ce motif ne distinguant pas les groupes. Les extensions (« -0 », « x12 ») ne sont pas gérées.
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
- Italian phone number
- Japanese phone number
- Mexican phone number
- Norwegian phone number
- Polish phone number
- South African phone number
- Spanish phone number
- Swedish phone number
- Swiss phone number
- UK phone number
- US phone number
- All phone numbers by country