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

Collection et Stream Java Discussion :

Expression régulière pour contrôle de nombre


Sujet :

Collection et Stream Java

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2008
    Messages : 72
    Points : 43
    Points
    43
    Par défaut Expression régulière pour contrôle de nombre
    Bonjour.
    J'ai un petit souci avec une partie que je ne maîtrise pas beaucoup... Les Regex.
    Je cherche une expression régulière qui me permettrait de valider les différents points suivants.
    1_ la chaîne comparée doit etre composée uniquement de chiffres
    2_ la chaîne comparée doit contenir de 1 à n chiffres
    3_ la chaîne comparée peut contenir de 0 à 1 un caractère de séparation (le point ou la virgule uniquement).
    4_ après le séparateur de décimale il peut y avoir 1 à n chiffre

    Voici pour l'instant ce que je suis arrivé à faire....
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public static void main(String[] args) {
    		String chaine="1371.23";
    		//Pattern pattern = Pattern.compile("^[0-9]+(\\.)|(\\,){0,1}");
    		//Pattern pattern = Pattern.compile("^[0-9-.]+\",\"g");
    		//Pattern pattern = Pattern.compile("^[0-9]+(,[0-9]+)?");
    		if(pattern.matcher(chaine).find()){
    			System.out.println("ok");
    		}else{
    			System.out.println("ko");
    		}
     
    	}

    Je suis preneur de tous les avis.
    Merci

  2. #2
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    l'expression régulière est indispensable ?
    tu peux aussi utiliser et catcher l'exception pour vérifier ( bourrin quand même), ou une API

    si l'expression régulière est indispensable... hum ça pourrait donner ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Pattern.compile("^\\d+(?:\\.|\\,)?\\d*$");
    mais peut-être y a-t-il plus simple ?
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2008
    Messages : 72
    Points : 43
    Points
    43
    Par défaut
    trop fort!
    Effectivement l'expression régulière est obligatoire dans mon cas.
    La chaîne en question était en float mais pour des raisons de manque de précision lors de calcul avec des nombres très grand, j'ai du changer et avec mes contraintes, suis passer en string.

    Merci bien en tout cas.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 557
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    Citation Envoyé par Gardyen Voir le message
    si l'expression régulière est indispensable... hum ça pourrait donner ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Pattern.compile("^\\d+(?:\\.|\\,)?\\d*$");
    mais peut-être y a-t-il plus simple ?
    - ^ et $ sont, comme la plupart du temps, inutiles.
    - ?: est inutile.
    - La virgule n'est pas un token de regex, pas besoin de l'échapper. (Après, on peut trouver que c'est plus propre d'échapper les deux)
    - S'il y a un point ou une virgule, il faut au moins un chiffre après. Donc un + et pas un * . Mais il ne faut pas forcer deux chiffres, alors on met tout entre parenthèses et on met ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    hum pour le premier point ton expression valide des chaines comme a123.12b, a123 etc...

    étant devenu parano à force de développer des interfaces d'entrée de données j'ai tendance à rajouter ^$, mais dans son cas ça ne devrait pas être nécessaire effectivement
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 557
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    Citation Envoyé par Gardyen Voir le message
    hum pour le premier point ton expression valide des chaines comme a123.12b, a123 etc...
    En utilisant find(), une chaîne valide est trouvée.
    Ce qu'on cherche c'est si la chaîne dans son entier est valide, et pour cela on utilise matches(). Il ne faut pas encourager à utiliser le mauvais outil.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. [RegEx] Expression régulière pour un nombre
    Par PtitGénie dans le forum Langage
    Réponses: 6
    Dernier message: 14/12/2011, 13h31
  2. Réponses: 22
    Dernier message: 18/07/2006, 15h05
  3. [RegEx] Simple expression régulière pour ereg_replace
    Par aurapp dans le forum Langage
    Réponses: 6
    Dernier message: 12/03/2006, 12h34
  4. Expression régulière pour récupérer le nom d'un fichier
    Par calimero2611 dans le forum Langage
    Réponses: 5
    Dernier message: 24/02/2006, 19h00
  5. Expression Régulière pour float
    Par zebiloute dans le forum Langage
    Réponses: 5
    Dernier message: 26/09/2005, 14h03

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