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

API standards et tierces Java Discussion :

Problème de regex


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 178
    Par défaut Problème de regex
    Bonjour;
    Peut-on faire une regular expression avec les chiffres de 1 a 64;j'ai souvent vu la regex "[0-9]" mais jamais une regex au dela de 9 telle que "[1-64]" qui permettrait de filtre en dessous de 1 et au dela de 64.
    je voudrais faire un textfield ou l'on entre que les chiffres de 1 a 64

  2. #2
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par défaut
    Le plus simple serai de faire un test sur la valeur convertie en nombre.

    Cependant, la regex qui match 0 à 64 est la suivante :
    6[0-4]|[1-5][0-9]|[1-9]
    Mais il faut faire attention au "matching", car il faut que ton match soit exactement ce que la personne à saisi et non une sous partie.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  3. #3
    Membre Expert Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Par défaut
    Salut,

    La notation [0-9] n'a rien à voir avec le fait de limiter le nombre saisie entre 0 et 9.

    Cela signifie simplement que ta regex va renvoyer faux si tu tapes autre choses que des nombre décimaux.

    Pour ce qui est de limiter le nombre maximal en saisie, il vaut mieux passer par un simple code Java ça sera beaucoup plus simple qu'avec une regex.
    C'est d'ailleurs à mon avis une mauvaise idée de passer par des regex pour faire ce genre de chose ! C'est un peu comme sortir un bazooka pour aller à la chasse au pigeon.

    Si tu peux faire la même chose "facilement" en Java, c'est toujours à privilégier plutôt que de passer par des regex qui peuvent vite être très couteuse en ressources.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    try
    {
      if( Integer.valueOf( textField.getText() ) )
        throw new IllegalArgumentException( "Le nombre saisie ne doit pas être supérieur à 64" );
    }
    catch( NumberFormatException e )
    {
      System.out.println( "Le texte saisie n'est pas un nombre " );
    }
    cdt.

  4. #4
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par défaut
    Par contre copie/colle pas le code de Nico02, il est incomplet. C'est juste l'idée de la validation !

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  5. #5
    Membre Expert Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Par défaut
    Citation Envoyé par kolodz Voir le message
    Par contre copie/colle pas le code de Nico02, il est incomplet. C'est juste l'idée de la validation !

    Cordialement,
    Patrick Kolodziejczyk.
    Oops j'ai oublier d'écrire la condition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    try
    {
      if( Integer.valueOf( textField.getText() ) > 64 )
        throw new IllegalArgumentException( "Le nombre saisie ne doit pas être supérieur à 64" );
    }
    catch( NumberFormatException e )
    {
      System.out.println( "Le texte saisie n'est pas un nombre " );
    }
    Désolé

  6. #6
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par défaut
    Et la condition qui fait que ce n'est pas négatif ?
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  7. #7
    Membre Expert Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Par défaut
    Aussi oui

    Enfin bon il devrait y arriver j’espère

  8. #8
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    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 986
    Par défaut
    Une classe de caractères est juste une "selection" de caractères, il n'y a pas de notion d'ordre à l'intérieur. [abcd] est identique à [badc] donc tu ne peux pas représenter un mot ou un nombre à l'intérieur [64] est identique à [46].

    Le tiret dans une classe de caractère sert à définir un rang de caractères successifs dans la table ascii ou unicode et tu peux écrire [0-9] uniquement parce que le zéro est placé avant le neuf dans la table de caractère. De même tu peux très bien écrire [8-=] pour représenter les caractères 8 9 : ; < =, mais pas [=-8] car l'ordre de la table n'est pas respecté.

    Tu peux valider un nombre dans un champ facilement avec du code. Mais si un jour tu es amené à "limiter" une valeur au sein d'une pattern plus grande, le mieux est de regarder le travail du moteur de regex pour le limiter au maximum. Par exemple pour un entier entre 1 et 64, mieux vaut écrire:[1-5][0-9]?|6[0-4]?|[789] en plaçant le cas le plus probable en premier.

Discussions similaires

  1. [Java] Problème de Regex
    Par spk4ever dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 28/08/2006, 10h51
  2. Problème avec Regex
    Par trihanhcie dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/07/2006, 14h50
  3. problème de regex
    Par lanfeust42 dans le forum Langage
    Réponses: 11
    Dernier message: 12/07/2006, 15h32
  4. Problème avec RegEx et une Query string
    Par Erakis dans le forum Langage
    Réponses: 6
    Dernier message: 08/11/2005, 15h48
  5. Problème de Regex ... avec un point
    Par bugalood dans le forum Langage
    Réponses: 2
    Dernier message: 29/05/2005, 10h26

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