Expressions régulières, fonction replace

Résolu
sapakus Messages postés 96 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 10 février 2011 - 16 févr. 2006 à 04:29
cs_bultez Messages postés 13616 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 - 17 févr. 2006 à 06:30
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

sapakus Messages postés 96 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 10 février 2011 3
17 févr. 2006 à 04:22
ç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
3
cs_bultez Messages postés 13616 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
17 févr. 2006 à 06:30
>>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>
3
cs_bultez Messages postés 13616 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
16 févr. 2006 à 07:37
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>
0
sapakus Messages postés 96 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 10 février 2011 3
16 févr. 2006 à 22:19
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sapakus Messages postés 96 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 10 février 2011 3
16 févr. 2006 à 22:46
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
0