IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

chaine de caractères numérique


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 65
    Par défaut chaine de caractères numérique
    Bonjour
    j'ai du mal avec quelques opérations que je voudrai réaliser en js. je suis vraiment debutant en javascript.

    ma variable "nom" contient "abc123456"
    je souhaite découper cette chaine en deux parties; la partie "debut" qui contiendra les lettres et la partie "fin qui contiendra "les chiffres"
    (sachant que le nombre de lettre et de chiffre n'est toujours le meme)

    ensuite ajouter 236 à "fin" (operation mathématique : fin=fin+236) puis reconstituer "nom" en concatenant "debut.fin".

    je pense peut etre créer une fonction qui fait toutes ces opérations avec le parametre "nom".

    Est-ce d'abord possible d'interpreter ma chaine de caractere en chaine numerique et pouvez vou m'eclairer sur le code.
    Merci d'avance

  2. #2
    Membre Expert
    Avatar de ryan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2003
    Messages
    956
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 956
    Billets dans le blog
    1
    Par défaut
    Yop!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    nom = "abc123456";
    debut = nom.substr(0,3);
    fin = parseInt(nom.substr(3,6)) + 236;
    nom = debut + fin;

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 65
    Par défaut Merci
    Yop !
    Merci pour ta réponse très rapide ryan.
    c'est ce que que je cherchais sauf que le nombre de lettre n'est pas forcement 3 et le nombre de chiffre pas forcement 6. (je vais utiliser une fonction "changer_nom" donc "nom" sera en parametre et jamais le meme...)
    Il y a t'il une fonction qui puisse me renvoyer le nombre de lettres dans une chaine et une qui renvoi le nombre de chiffres dans une chaine?

    Merci encore

    un peu dans ce genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    nom = "abc123456";
    nb_lettre=lettres(nom);
    nb_chiffre=chiffres(nom);
    debut = nom.substr(0,nb_lettre);
    fin = parseInt(nom.substr(nb_lettre,nb_chiffre)) + 236;
    nom = debut + fin;

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    nom = "abc123456";
    debut = nom.replace(/d+$/,'');
    fin = nom.replace(/^[a-z]+/,'');
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var Chaine =  "kjhkjhkh32132132"
     var reg=/(\D+)(\d+)/i;
                      Chaine.match(reg);
                      alert('les chiffres: '+ RegExp.$1+' les lettres '+RegExp.$2);
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 65
    Par défaut petit problème
    J'ai l'impression que la solution de bovino ne fonctionne pas totalement, voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     
      <SCRIPT language="Javascript">
     
    var nom = "abc123456";
     
     
    debut = nom.replace(/d+$/,'');
    document.write( "debut : " + nom  + " ------ ");
    fin = nom.replace(/^[a-z]+/,'');
    fin2 = parseInt(fin) + 1;
    nom = debut + fin2;
    document.write( "nom est maintenant " + nom );
     
    </SCRIPT>
    à l'affichage j'ai :

    debut : abc123456 ------ nom est maintenant abc123456123457


    ps : je m'empresse de tester la solution de spacefrog...

  7. #7
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Euh... c'est ton code de test qui va pas !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    debut = nom.replace(/d+$/,'');
    document.write( "debut : " + nom  + " ------ ");
    La variable nom n'a pas changé, donc... c'est toujours la même, teste avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    debut = nom.replace(/d+$/,'');
    document.write( "debut : " + debut + " ------ ");
    EDIT :
    Cela n'empêche pas que la solution de SpaceFrog est probablement meilleure...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 65
    Par défaut bien vu
    euh...bien vu !!

    on approche à grand pas de la solution finale


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    var Chaine =  "abcd0001";
     var reg=/(\D+)(\d+)/i;
    Chaine.match(reg);
    document.write( "RegExp.$1 " + RegExp.$1 + "<br>");
    document.write( "RegExp.$2 " + RegExp.$2 + "<br>");
     
    var fin = parseInt((RegExp.$2)) + 3;
    document.write( "fin : " + fin + "<br>");
     
    Chaine=RegExp.$1 + fin;
    document.write( "Chaine : " + Chaine );
    affichage :
    RegExp.$1 abcd
    RegExp.$2 0001
    fin : 4
    Chaine : abcd4

    j'aurai voulu abcd0004 (ca vient peut etre du parseInt ??)...une idée ?
    merci encore

  9. #9
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    toPrecison(length) ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 65
    Par défaut suite
    merci à vous tous de vous impliquer autant.


    test :
    fin = 4;
    document.write (fin.toPrecision(((fin).length)));
    ->renvoi 4.000 et non 0004 donc inutilisable pour moi

    autre test (presque bon mai probleme quant mon nombre commence par 0)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    var Chaine =  "abcd085849";
    var reg=/(\D+)(\d+)/i;
    Chaine.match(reg);
    var debut = RegExp.$1;
    var fin = RegExp.$2;
    document.write( "debut " +  debut + "<br>");
    document.write( "fin " +  fin + "<br>");
    document.write ("parseInt(fin) : " + parseInt(fin)+ "<br>");
     
    fin2 = parseInt(fin)+ 3;   
    document.write( "fin2 [parseInt(fin) + 3]: " + fin2 + "<br>");
     
    Chaine=debut + fin2;
    document.write( "Chaine : " + Chaine );
    Résultat :

    -debut abcd
    -fin 085849
    -parseInt(fin) : 0
    -fin2 [parseInt(fin) + 3]: 3
    -chaine : abcd3

    En revanche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    var Chaine =  "abcd47";
    var reg=/(\D+)(\d+)/i;
    Chaine.match(reg);
    var debut = RegExp.$1;
    var fin = RegExp.$2;
    document.write( "debut " +  debut + "<br>");
    document.write( "fin " +  fin + "<br>");
    document.write ("parseInt(fin) : " + parseInt(fin)+ "<br>");
     
    fin2 = parseInt(fin)+ 3;   
    document.write( "fin2 [parseInt(fin) + 3]: " + fin2 + "<br>");
     
    Chaine=debut + fin2;
    document.write( "Chaine : " + Chaine );
    résultat bon :
    -debut abcd
    -fin 47
    -parseInt(fin) : 47
    -fin2 [parseInt(fin) + 3]: 50
    -Chaine : abcd50

    donc probleme avec des 0...quelqu'un aurai la solution ?

  11. #11
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    enlève le parseInt ...
    tu le feras après pour les calcule ou en multipliant par 1
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 65
    Par défaut suite
    Je ne peux pas l'enlever le parseInt :
    exemple :

    fin =3;
    fin2 = fin +111;
    fin2 aura pour valeur 3111


    donc l'addition ne se fait pas si j'enleve le parseInt...

    sinon je pense à un autre solution c decouper ma chaine en 3 partie
    exemple
    nom = "abc001111"
    reg1 > abc
    reg2 > 00
    reg3 > 1111

    coment puis je faire ca ?

    var reg=/(\D+)(\0)(\d+)/i;
    Chaine.match(reg);
    ???

  13. #13
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    tu as mal lu ce que je t'ai dit ...


    et hop plus besoin du parseInt
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 65
    Par défaut
    merci beaucoup ca marche !

    mais dans un exemple avec des zéros je les perds...
    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    var Chaine =  "abc00111";
    var reg=/(\D+)(\d+)/i;
    Chaine.match(reg);
     
    var debut = RegExp.$1;
    var fin = RegExp.$2;
    document.write ("Chaine : "+ Chaine + "<br>");
    document.write( "debut : " +  debut + "<br>");
    document.write( "fin : " +  fin + "<br>");
    //document.write ("parseFloat(fin) : " + parseFloat(fin)+ "<br>");
     
    fin2 = fin*1+ 2;   
    document.write( "fin2 [fin*1+ 2] : " + fin2 + "<br>");
     
    Chaine=debut + fin2;
    document.write( "Chaine : " + Chaine );
    Résultat affichage :
    Chaine : abc00111
    debut : abc
    fin : 00111
    fin2 [fin*1+ 2] : 113
    Chaine : abc113

    Donc dans la bataille on a perdus les zéros
    c'est pour ca que je voudrai decouper ma chaine en 3 parties (la deuxieme partie serait tout les zeros qui se suivent juste apres les lettres).
    je voudrai connaitre ce que je dois mettre a "var reg=" pour en 3 partie comme expliquer ci dessus

  15. #15
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    oulà j'avais pas tout suivi ... ben fait un regExp pour extraire les zeros en debut de fin1 et les rajouter après ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    reg=/(^0+)/;
    fin1.match(reg);
    fin2 =RegExp.$1+fin1*1+111
    pas testé ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  16. #16
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var fin1="00002" 
    var reg=/^(0+)/
    fin1.match(reg);
    var fin2 =RegExp.$1+(fin1*1+111)                  
      alert(fin2)

    a pondérer toutefois avec le length de fin1
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 65
    Par défaut Résolu
    Merci beaucoup tout fonctionne !! et maintenant j'ai besoin de le faire en php ... lol .. si si c'est vrai !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     var Chaine =  "abc000123";
     document.write( "Chaine : " + Chaine + "<br>" );
        var reg=/(\D+)(\d+)/i;
        Chaine.match(reg);
        var Debut = RegExp.$1; 
        //abc
        var Fin = RegExp.$2;  
        //000123
     
    document.write( "Debut " +  Debut + "<br>");
    document.write( "Fin " +  Fin + "<br>");
     
    var reg2=/(^0+)(\d+)/;
    Fin.match(reg2);
    var Fin1 = RegExp.$1; //000
    var Fin2 = RegExp.$2;  //123
    Fin3 = Fin2*1+10;
    document.write( "Fin1 " +  Fin1 + "<br>");
    document.write( "Fin2 " +  Fin2 + "<br>");
    document.write( "Fin3 " +  Fin3 + "<br>");
     
    Chaine=Debut + Fin1 + Fin3;
    document.write( "Chaine " + Chaine + "<br>");
    Résultat :

    Chaine : abc000123
    Debut abc
    Fin 000123
    Fin1 000
    Fin2 123
    Fin3 133
    Chaine abc000133


    j'ai réussi à "ajouter 10 à ma chaine de caractere" Merci

  18. #18
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    pour la première separation entre chiffres et lettres :

    un match là dessus marche du tonnerre
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/06/2010, 16h02
  2. Réponses: 1
    Dernier message: 17/04/2009, 19h56
  3. Tester si chaine de caractères contient des numériques
    Par Marie.B dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 19/10/2008, 18h32
  4. sortir deux valeurs numériques d'une chaine de caractères
    Par Ness2000 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/07/2008, 08h52
  5. Conversion chaine de caractères en numérique
    Par arezki76 dans le forum Shell et commandes GNU
    Réponses: 33
    Dernier message: 18/07/2007, 11h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo