La Regex qu'elle est la mieux

Résolu
sapakus Messages postés 96 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 10 février 2011 - 21 mars 2008 à 23:08
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 - 22 mars 2008 à 16:09
Bonjour, pour mettre en forme un numéro de téléphone du type 0123456789 en 01.23.45.67.89, j'utilise la méthode replace avec un regex :

var numero='0123456789';
numero=numero.replace(/(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/, "$1.$2.$3.$4.$5");

Et vous savez quoi ? ça marche !

Mais je dois avouer que mon expression régulière est vilaine et qu'il doit y avoir une solution regex bien plus élégante et condensée du genre : numero.replace(/Colles-moi un point tous les deux chiffres sauf pour les derniers (!)/," Et qu'ça saute $1");




Merci de vos suggestions.



Sapakus

3 réponses

cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
22 mars 2008 à 10:24
Bonjour,

    pas sûr justement qu'on puisse dire "remplacer tout sauf le dernier" !
       mais bon... je ne maîtrise pas réellement les expressions régulières...

    en attendant une réponse un peu plus séreiuse :

var numero='0123456789';
var cas=0;

numero=numero.replace(/(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/, "$1.$2.$3.$4.$5");
       ou
numero=numero.replace(/(..)/g, "$1.").substring(0,14);
       ou
numero=numero.replace(/(..)/g,function($0)    {    cas++;
                                                                            var tmp=$0;
                                                                            if ( cas<5 ) tmp+=".";
                                                                            return tmp; });
alert(numero);

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
3
sapakus Messages postés 96 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 10 février 2011 3
22 mars 2008 à 14:58
Merci pour ces suggestions Bultez, notamment  pour l'option /g et l'usage du point pertinent dans ce cas précis mais ...

...La Regex qu'elle est la mieux ... et bien c'est la mienne !!! Parce que j'ai trouvé !

Il faut utiliser le "test avant négatif" soit (?!\d{2}$) soit: remplaces sauf si les deux derniers chiffres sont en fin de chaine

Ce qui nous donne :

var numero= "0123456789";

numero=numero .replace (/(?!\d{2}$)(\d{2})/g,"$1.");

ou plus court :

numero =numero.replace(/(?!..$)(..)/g,"$1.");

(car aprés tout c'est sensé être un numéro de téléphone donc on a affaire à des chiffres, inutile de le préciser)

Voilà, mais il y a peut-être encore mieux ! Car avec les expressions régulières on ne sait jamais !




S
apakus
3
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
22 mars 2008 à 16:09
>>.replace(/(?!..$)(..)/g,"$1.");
    ah ben oui... nettement plus mieux !
>> mais il y a peut-être encore mieux
    y'a bien un autre intervenant qui va intervenir ( justement), ou toi....
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
Rejoignez-nous