2009-10-06 7 views
0

Pour une fonction php décent et standardisée, je souhaite formater une chaîne entrée par l'utilisateur dans un fichier std. format de numéro de téléphone international. La chaîne sera supprimée des autres caractères en tant que chiffres et + -signs. Tous les espaces seront supprimés. Après que je veux formater les différentes chaînes à une forme standardisée:Formatage du numéro de téléphone

+310612345678 -> +31 (0)61 234 5678 
00310612345678 -> +31 (0)61 234 5678 

+31612345678 -> +31 (0)61 234 5678 
//add a leading zero between brackets (0)) 
0031612345678 -> +31 (0)61 234 5678 

06 12345678 -> +31 (0)61 234 5678 
//When no country code is given (no 00xx or +xx) than add the dutch one. 

Ceci est la fonction que j'ai allready:

function formatPhoneNumber($num){ 
//delete everything except digits and + 
    $number = preg_replace('/[^\d|\+]/', '', $number); 

if(substr($number,0,1) == '+' || substr($number, 0,2) == 00){ 
    // 
}else{ 
    $number = "+31".$number; 
} 

///////// 
// formatting as mentioned above 
///////// 


return $num 
} 

Je cherche un algorithme pour formater les différentes façons des numéros de téléphone entrés par l'utilisateur dans un format: +31 (0) 61 2345678

+0

Un peu comiquement, l'extension skype firefox convertit tous ces numéros de téléphone en un type de widget. –

+1

Quelle est votre question? Vous cherchez une norme pour représenter les numéros de téléphone (répondez ici: http://www.itu.int/rec/T-REC-E.123-200102-I/e)?Êtes-vous aux prises avec des expressions régulières pour convertir une chaîne en une autre? Êtes-vous à la recherche d'un algorithme? – mouviciel

+0

Je cherche en effet un algorithme pour convertir ces différents nombres en un format. – blub

Répondre

3

Je ne suis pas sûr qu'il existe vraiment une norme internationale pour cela au-delà du préfixe du code de pays. Pour des exemples de formatage de numéros de téléphone internationaux, voir here. Le formatage change en fonction du pays et du type.

par exemple. au Royaume-Uni, nous avons +44 (0) 20 1234 1234 pour les lignes fixes, et +44 (0) 7700 123456 pour les mobiles. Par conséquent, si vous voulez le faire correctement, je pense que vous devrez identifier le code du pays, puis brancher un formateur spécifique au pays.

+0

Merci. Je savais tous que les différents pays ont des options de formatage différentes. Bien que finalement je veux l'implémenter, pour l'instant je cherche un bon moyen de reformater la chaîne d'entrée d'utilisateur à ce format: +31 (0) 61 234 5678; Une norme acceptée ici :) – blub

3

Je n'ai pas de solution finale pour cela dans le moment, mais je voudrais souligner quelques difficultés si vous ne voulez pas analyser uniquement les numéros néerlandais:

  • Vous devez connaître tous les préfixes internationaux (certains sont à un chiffre comme le +1 nord-américain, certains à deux chiffres comme le néerlandais +31, et certains à trois chiffres comme le tchèque +420) et s'il n'y a pas d'espace entre le code du pays et la zone code vous ne pouvez pas simplement identifier la position correcte pour l'espace dans votre format. En outre, vous ne pouvez pas supposer automatiquement qu'un zéro initial dans l'indicatif régional est redondant. Dans certains pays comme l'Italie, le zéro principal doit être utilisé même dans les appels internationaux, i. e. si vous voulez appeler Milan numer 02 123456 des Pays-Bas, vous devez appeler +39 02 123456 au lieu de +39 2 123456.

Ainsi, il ne suffit pas d'écrire un algorithme de mise en forme court mais très bien au sujet comprendre les différents formats et usages numériques dans différents pays. Bien sûr, vous pouvez convertir des nombres hollandais (je suppose que vous connaissez et comprenez exactement le format de numéro de téléphone néerlandais) au format décrit et convertir chaque nombre étranger en supprimant simplement tous les espaces de toute sorte et remplacer un "00" un "+" - si vous ne voulez pas de solution rapide et sale, vous avez beaucoup de travail à faire.

+0

Ah putain il y a plus de problèmes à cette question que je pensais à l'avance qu'il y aurait. – blub

1

C'est intéressant, car ce n'est pas la façon standard de formater les numéros mobiles hollandais (tous commencent par 06) aux Pays-Bas.

Vous devriez probablement écrire ce test-driven. Il y a beaucoup de cas intéressants que vous voudrez couvrir, et ainsi vous serez au moins capable de montrer ce que vous faites et ce que vous ne convertissez pas.

+0

C'était la première standardisation que j'ai personnellement ajoutée. Un préfixe/indicatif régional se compose toujours de 3 chiffres: 043 (maastricht), 06x (mobile), 047 (5) roermond. – blub

+0

Les Néerlandais n'aiment pas ça! Un examen rapide des cartes de visite a montré que seulement 6 personnes sur 85 le font. –

+0

Je l'ai déjà inversé; Même moi-même ne pouvais pas m'habituer à la notation :) – blub

Questions connexes