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 :

[regexp] format nombre


Sujet :

JavaScript

  1. #1
    Membre averti

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    346
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 346
    Points : 439
    Points
    439
    Par défaut [regexp] format nombre
    Bonsoir,

    Le but de la regex à créer est de matcher les nombres avec au plus deux chiffres entiers et au plus 4 chiffres décimaux (séparateur décimal pouvant être une , ou .)
    Voici un code minimaliste :

    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
    24
    25
    26
    27
    28
    29
     
    <script>
     
    function check(rate) {
    	alert(rate);
    	var reg2 = new RegExp("^(\\d{1,2})(\.|,)(\\d{1,4})$");
    	if (!reg2.test(rate)) {
    		alert('ko');
    	}
    	else {
    		alert('ok');
    	}
    }
     
    </script>
     
    <html>
     
    <ul>
    <li><a href="javascript:check('10.33');">10.33</a></li>
    <li><a href="javascript:check('10,34');">10,34</a></li>
    <li><a href="javascript:check('10.');">10.</a></li>
    <li><a href="javascript:check('10,');">10,</a></li>
    <li><a href="javascript:check(',');">,</a></li>
    <li><a href="javascript:check('.');">.</a></li>
    <li><a href="javascript:check('100');">100</a></li>
    <ul>
     
    </html>
    Je ne comprends pas pourquoi 100 est considérer comme correct avec la regexp employée (les autres exemples sont corrects). Merci de votre aide.

  2. #2
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 143
    Points
    11 143
    Par défaut
    bonjour,

    pourquoi \\d dans ton expression régulière ? Normalement c'est \d

  3. #3
    Membre averti

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    346
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 346
    Points : 439
    Points
    439
    Par défaut
    D'après mes tests pour contrôler un nombre d'un ou deux digits :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var reg2 = /^\d{1,2}$/;
    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var reg2 = new  RegExp("^\\d{1,2}$");
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var reg2 = new  RegExp("^\d{1,2}$");
    n'a pas le bon pattern. JS doit interpréter la chaine.

    Pouvez-vopus confirmer et quelle est la meilleure écriture (la première semble plus employée) ?

  4. #4
    Membre averti

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    346
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 346
    Points : 439
    Points
    439
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var reg2 = /^\d{1,2}(\.|,)\d{1,4}$/;
    permet d'avoir le bon pattern. Je suis curieux de savoir pourquoi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var reg2 = new RegExp("^\\d{1,2}(\.|,)\\d{1,4}$");
    ne fonctionne pas alors que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var reg2 = /^\d{1,2}$/;
    var reg2 = new  RegExp("^\\d{1,2}$");
    Reconnait le même motif. Je laisse ouvert pour avoir cet éclaircissement.

  5. #5
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 143
    Points
    11 143
    Par défaut
    sans doute parce que RegExp attend un second argument:

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var reg2 = new  RegExp("^\d{1,2}$","");

  6. #6
    Membre averti

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    346
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 346
    Points : 439
    Points
    439
    Par défaut
    http://developer.mozilla.org/en/docs...Objects:RegExp

    Le second argument est optionnel dans le constructeur ou je comprends mal ?

    Et comme indiqué plus bas :

    When using the constructor function, the normal string escape rules (preceding special characters with \ when included in a string) are necessary. For example, the following are equivalent:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var re = new RegExp("\\w+");
    var re = /\w+/;
    Ce qui explique la nécessité de doubler le \ et donc la première ligne était :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var reg2 = new RegExp("^(\\d{1,2})(\\.|,)(\\d{1,4})$");
    Il faut penser à doubler tous les \, j'avais oublié celui du .

    Merci à vous cette fois on peut fermer.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 29/01/2024, 15h32
  2. Format nombre dans zone de liste
    Par rogeryzf dans le forum Access
    Réponses: 1
    Dernier message: 18/09/2006, 13h59
  3. [FB1.5.3] Date au format "nombre de secondes"
    Par SamRay1024 dans le forum Débuter
    Réponses: 2
    Dernier message: 16/03/2006, 05h38
  4. Formater des cellules excel en format nombre
    Par _developpeur_ dans le forum Access
    Réponses: 7
    Dernier message: 09/01/2006, 14h13
  5. [Format]nombres avec des 0
    Par zozolh2 dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 01/06/2004, 08h43

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