Problème avec expression régulière

wagdifr Messages postés 25 Date d'inscription mercredi 5 mai 2004 Statut Membre Dernière intervention 3 mars 2011 - 24 juin 2009 à 17:47
cs_RedDog Messages postés 50 Date d'inscription lundi 7 avril 2003 Statut Membre Dernière intervention 21 août 2013 - 25 juin 2009 à 22:54
Salut ,
Dans mon application , je ne veux pas qu'un utilisateur arrive à saisir un montant sous cet format  : "vide" suivit "d'un point" puis "n'import quel chiffre " exemple :
 .36
 .55
 .9333

l'expression régulière que j'utilise est la suivante "/^[-]?[0-9 .,']*[.,]?[0-9]*$/"

Merci

2 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
24 juin 2009 à 19:04
Salut,

Tu devrais plutôt poser ta question sur le tout nouveau site du portal codes-sources dédié aux expressions régulières :
http://regex.codes-sources.com/

Sinon, je ne suis pas un pro des regex, mais je dirais de remplacer le "*" par un "+" si tu veux que l'utilisateur saisisse au moins 1 chiffre :
/^[-]?[0-9]+[ .,']?[0-9]*$/
0
cs_RedDog Messages postés 50 Date d'inscription lundi 7 avril 2003 Statut Membre Dernière intervention 21 août 2013
25 juin 2009 à 22:54
Bonjour,

Bon d'abord je sais pas comment tu as trouvé cette expression mais ce n'est pas une expression régulière en Java ça ressemble plus à du Perl dans sa forme /expressionRecherchee/. Essayer ça directement en Java et on trouve rien à coup sûr.

Je peux te proposer une solution qu'il te faudra approfondir. Elle permet de faire à peu près ce que tu veux faire. A toi de virer les autres soucis (et donc de comprendre ce que tu souhaites faire). Personnellement, je préfèrerais faire ça lors du traitement incluant le cast en Float.
Une solution parmi tant d'autres : "-?[0-9]+[,\\.[0-9]]*"
(A noter qu'elle n'est pas si différente de celle énoncée par DARKSIDIOUS)

Exemple :

String[] stringTable = {"20","1.2","128,333","56;5",".23",
        "25,","30.",",84","-6.3","-50"};

Pattern p = Pattern.compile("-?[0-9]+[,\\.[0-9]]*");
for (String s : stringTable){
   Matcher m = p.matcher(s);
   if(m.matches()){
      System.out.println("Regex pour "+s+" a trouvé : "+m.group());
   }else{
      System.out.println("Regex pour "+s+" n'a rien trouvé.");
   }
}

Retourne :

Regex pour 20 a trouvé : 20
Regex pour 1.2 a trouvé : 1.2
Regex pour 128,333 a trouvé : 128,333
Regex pour 56;5 n'a rien trouvé.
Regex pour .23 n'a rien trouvé.
Regex pour 25, a trouvé : 25,
Regex pour 30. a trouvé : 30.
Regex pour ,84 n'a rien trouvé.
Regex pour -6.3 a trouvé : -6.3
Regex pour -50 a trouvé : -50

En tout cas, attention aux metacaractères. Le point est un metacaractère qui signifie "tout caractère" donc si on veut récupérer seulement un point on utilisera d'abord le backslash ce qui donnera en Java \\. .

Voilà, à plus !
0
Rejoignez-nous