Page 1 sur 1
[R]formater un numéro de téléphone
Posté : jeu. 22 févr. 2018 11:19
par corrs78
Bonjour,
je souhaite reformater un numéro de téléphone pour respercter une politique de nommage bien précise.
Dans le but de faire ça le plus "intelligemment" possible je vous sollicite.
le numéro de tel d'origine est formaté ainsi :
0199887766
l'objectif est d'obtenir un numéro de téléphone de ce format :
+33 1 99 88 77 66
Voici ma solution, qui je pense est loin d'être optimale, même si cela fonctionne.
Code : Tout sélectionner
$tel = "0130405060"
$var = StringTrimLeft($tel,2)
Local $tel1 = StringMid($var, 1,2)
Local $tel2 = StringMid($var, 3,2)
Local $tel3 = StringMid($var, 5,2)
Local $tel4 = StringMid($var, 7,2)
$tel_reformate = "+33 1 "&$tel1&" "&$tel2&" "&$tel3&" "&$tel4
ConsoleWrite($tel_reformate)
Bien cordialement.
Re: [..]formater un numéro de téléphone
Posté : jeu. 22 févr. 2018 14:27
par walkson
Re: [..]formater un numéro de téléphone
Posté : jeu. 22 févr. 2018 14:34
par corrs78
Merci Walkson, je me doutais bien que c'etait plus "judicieux" de traiter cela avec une RegExp.
Re: [..]formater un numéro de téléphone
Posté : jeu. 22 févr. 2018 20:03
par mikell
@walkson
Pour le fun
Re: [..]formater un numéro de téléphone
Posté : ven. 23 févr. 2018 14:56
par walkson
J'ai eu du mal à comprendre comment tu passais de 01 à 1 avant d'avoir vu Number($tel) (c'est de la triche !

)
Re: [..]formater un numéro de téléphone
Posté : ven. 23 févr. 2018 14:58
par corrs78
en effet jolie feinte,
merci à tous, je serais moins bête ce soir en me couchant (meme si j'ai toujours du mal avec les expressions régulières

)
Re: [..]formater un numéro de téléphone
Posté : sam. 24 févr. 2018 14:13
par mikell
walkson a écrit : ↑ven. 23 févr. 2018 14:56J'ai eu du mal à comprendre comment tu passais de 01 à 1 avant d'avoir vu Number($tel) (c'est de la triche !

)
Meuh non, c'est un raccourci
Mais note qu'avec cette méthode, si un jour les préfixes > 09 existent, mon petit code marchera encore

Re: [R]formater un numéro de téléphone
Posté : sam. 24 févr. 2018 14:21
par orax
corrs78 a écrit : ↑ven. 23 févr. 2018 14:58[...] (meme si j'ai toujours du mal avec les expressions régulières

)
Avec cet exemple ci-dessous, c'est plus simpliste, mais c'est peut-être aussi plus facile à comprendre :
Code : Tout sélectionner
MsgBox(0, "", StringRegExpReplace("0130405060", "0(\d)(\d\d)(\d\d)(\d\d)(\d\d)", "+33 \1 \2 \3 \4 \5"))
\d
=
[0-9]
Et au lieu de
\d\d
j'aurais pu écrire
\d{2}
.
Re: [R]formater un numéro de téléphone
Posté : lun. 26 févr. 2018 18:01
par corrs78
Finalement j'ai du reprendre la solution de Mikell, car la regexp de Walkson (ci dessous) ne marchait pas dans un cas précis
Code : Tout sélectionner
$string = StringRegExp([0-9]{2}, $regex, 3)
$telFormat = StringFormat("+33 %1i %2i %2i %2i %2i", $string[0], $string[1], $string[2], $string[3], $string[4] )
j'avais un numéro de ce genre : 0203042005
et au final il me manquait un zéro à la fin : +33 2 03 04 20 5
Re: [R]formater un numéro de téléphone
Posté : lun. 26 févr. 2018 21:04
par mikell
La regex de walkson marche, c'est le StringFormat qui était à adapter
"If the number of characters in the output value is less than the specified width, blanks are added to the left or the right of the values (...) until the minimum width is reached. If width is prefixed with 0, zeros are added until the minimum width is reached "
So :
$telFormat = StringFormat("+33 %1i %02i %02i %02i %02i", $string[0], $string[1], $string[2], $string[3], $string[4] )
NB: dans mon code Number() n'est pas vraiment une feinte. ça fait sauter le "0" initial, et ça marche parce que le préfixe 00 n'existe pas

Re: [R]formater un numéro de téléphone
Posté : mer. 28 févr. 2018 00:31
par Tlem
Bon je sais qui fait pas encore assez chaud, mais pour celles (et ceux) qui préfèrent les strings ...
Code : Tout sélectionner
$tel = "0130405060"
MsgBox(0, "Tel formaté", "+33 " & StringMid($tel, 2, 1) & " " & StringMid($tel, 3, 2) & " " & StringMid($tel, 5, 2) & " " & StringMid($tel, 7, 2)& " " & StringMid($tel, 9, 2))
Bon, c'est la même chose que le premier message de corrs78 mais en simplifié. ^^
Après, il y a pire :
Code : Tout sélectionner
$t = StringSplit("0130405060", "")
MsgBox(0, "Tel formaté", "+33 " & $t[2] & " " & $t[3] & $t[4] & " " & $t[5] & $t[6] & " " & $t[7] & $t[8] & " " & $t[9] & $t[10])
Bonne nuit. ^^