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 :

tester une regexp [RegExp]


Sujet :

JavaScript

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 482
    Par défaut tester une regexp
    Bonjour,

    Je défini cette regexp:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var regexLon1 = new RegExp("^-?([0-9](\.\d{0,})?$|[0-9][0-9](\.\d{0,})?$|[0-1][0-7][0-9](\.\d{0,})?$|180)");
    et je teste avec l'instruction:
    où c est ma chaine à tester

    si je teste la chaine '-5', ça me renvoie true, mais si je teste '-5.0', ca renvoie false

    pourtant j'ai testé sur un site en ligne ici, et ça renvoie true dans les 2 cas

    qu'est ce qui cloche?

    Merci,
    Nico

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 982
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 982
    Par défaut
    Lorsque tu utilises le constructeur RegExp, comme son paramètre est contenu dans une string, tous les antislashes doivent être échappés par un autre antislash (sinon ils sont ignorés).

    D'un autre coté, tu n'a pas besoin d'utiliser ce constructeur et tu peux directement écrire une regex litérale: var regexLon1 = /^-?(\d...)$/;.


    Tu peux remplacer {0,} par *. Je remarque aussi que la branche 180 n'est pas ancrée à la fin. (L'ancre de fin pourrait être mise en facteur à toutes les branches).

    [0-1] ne constitue pas un rang, il n'y a pas de caractères entre 0 et 1.

    Tu peux la condenser comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var regexLon1 = /^-?(?:(?:[01][0-7]|\d)?\d(?:\.\d+)?|180)$/;
    Voire quelque chose de plus "hand driven" qui évite les entrées comme 007:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var regexLon1 = /^-?(?:[2-9]\d?(?:\.\d+)?|1(?:80|\d(?:\.\d+)?)|0(?:\.\d+)?)$/;
    (Pour éviter les zéros à la fin aprés la virgule, il suffit de remplacer tous les (?:\.\d+) par (?:\.\d*[1-9]))

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

Discussions similaires

  1. [vb.net] tester une valeur nulle de maniere elegante
    Par graphicsxp dans le forum Windows Forms
    Réponses: 5
    Dernier message: 22/08/2005, 15h36
  2. NASM Tester une variable d'environnement à la "compilat
    Par Pierre Maurette dans le forum Assembleur
    Réponses: 1
    Dernier message: 10/06/2005, 13h27
  3. tester une chaine de connection
    Par graphicsxp dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/05/2005, 13h32
  4. tester une periode de date
    Par jpg dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 03/12/2004, 15h37
  5. [Débutant] Tester une connection sur bdd
    Par lando dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 03/09/2003, 14h37

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