Expressions régulières, fonction replace [Résolu]

Signaler
Messages postés
96
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
10 février 2011
-
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
-
Bonjour,

Voili voilou : je veux enlever les zéros au début d'une chaine de caractères et garder le reste, et ce en utilisant les expressions régulières avec la fonction replace. La chaine n'est composée que de chiffres et n'a pas forcément de zéro(s*) au début, exemples : "01","164","000406","0123"........

voici mon code :

var chaichaine= "0123456";
var espression =/^(0*)?([1-9][0-9]*)$/;
chaichaine.replace(espression,"$2");
alert(chaichaine);

et la fenêtre m'affiche : 0123456

Pourquoi ?

Merci de vos réponses.

S
apakus

5 réponses

Messages postés
96
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
10 février 2011
3
ça y est j'ai trouvé l'erreur !

Elle est du à la mauvaise utilisation de la méthode replace qui ne transforme pas une chaine de caractères, mais renvoie une chaine de caractères transformée. Donc voici le code correct avec la regex de Bultez en prime :

var chaichaine= "0123456";
var espression =/(^0*)/g;
chaichaine=chaichaine.replace(espression,"");
alert(chaichaine);

La cause de tous mes maux étaient à la ligne 3.

Merci à Bultez, et à moi, ne l'oublions pas.

S
apakus
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
32
>>Si le nombre saisi ne commence pas par un zéro tout va bien
oui, oui : utiliser parseInt(valeur,10)
sinon, si valeur commence par 0 => Octal !
Cordialement. Bul. ~ Mon Site qu'il est à Moi ~<FO>
</FO>
</S< body>
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
32
Bonjour,
zone.replace(/(^0*)/g,"");
ça ne sert que pour la présentation, non ?
Cordialement. Bul. ~ Mon Site qu'il est à Moi ~<FO>
</FO>
</S< body>
Messages postés
96
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
10 février 2011
3
J'ai essayé avec ton code mais j'obtiens toujours 0123456.

La raison de tout ceci est :
dans un champs de formulaire, l'utilisateur doit rentrer un nombre qui doit s'additionner à un autre nombre indiqué en dessous. Or, pour que les chiffres s'alignent correctement (à droite) et ce quelque soit le nombre de chiffres saisi, je suis obligé de changer le sens de l'écriture en rtl par css.
Ensuite, intervient une fonction de controle sur le champs de saisie déclenchée par onkeyup, qui va vérifier ce qui a été saisi et qui va en cas de "mauvais caractère" vider le champs, c'est bien légitime.
Ensuite cette fonction effectue la somme des deux nombres. Et c'est à ce moment que tout dérappe !
Si le nombre saisi ne commence pas par un zéro tout va bien. En revanche si l'internaute imprudent glisse un ou plusieurs zéros devant la fonction eval ne considére plus la saisie comme un entier naturel et la somme devient fausse ! Avouez que c'est tout de même très embarrassant, exemple : 011+500=509 !
Si j'arrive à supprimer les zéros à gauche, je solutionnerai donc le problème et j'améliorerai la présentation du même coup.

S
apakus
Messages postés
96
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
10 février 2011
3
Visiblement eval() se met mystèrieusement à compter en base 8. ???
011+500=509
0111+500=573

Bien sur si je fait 0219+500 j'obtiens bien 719, là il ne peut plus faire le malin !

S
apakus