Bonjours. J'essai de créer une expression régulière pour tester une valeur numérique.
Sachant que celle-ci peut prendre la forme suivante :
[+|-]XX.YY
Ex:
0
10
10.2
10.23
-10.23
+10.23
Mais malheureseument mes essais sont infructeux.
Merci.
Version imprimable
Bonjours. J'essai de créer une expression régulière pour tester une valeur numérique.
Sachant que celle-ci peut prendre la forme suivante :
[+|-]XX.YY
Ex:
0
10
10.2
10.23
-10.23
+10.23
Mais malheureseument mes essais sont infructeux.
Merci.
A partir de ton jeu de valeurs acceptées, voici un script qui semble fonctionner correctement :
Il produit en sortie :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #/usr/bin/perl @_ = ("0","10","10.2","10.23","-10.23","+10.23","10.23a"); foreach(@_) { if (/^\+|-?[0-9]+\.?[0-9]*$/) { print "$_ OK\n"; } else { print "$_ PAS OK\n"; } }
En décortiquant l'expression régulière :Code:
1
2
3
4
5
6
7
8 0 OK 10 OK 10.2 OK 10.23 OK -10.23 OK +10.23 OK 10.23a PAS OK
si commence éventuellement par signe + ou signe -Code:/^\+|-?
si contient une valeur numérique suivie éventuellement d'un point et se termine éventuellement par une valeur numériqueCode:[0-9]+\.?[0-9]*$/
Tu pourras faire évoluer le code pour séparer les entiers des flottants.
Malheureusement, ta regex est légèrement fausse, car l'alternative ne se limite pas à un token de chaque côté, ce qui signifie ici que ton alternative "|" est entre "^\+" et "-?[0-9]+\.?[0-9]*$", et donc ta regex accepte "+ machin truc chouette !" ou "La proposition suivante -10".... :?
Je propose donc plutôt : /^(?:+|-)?\d+(?:\.\d+)?$/ .
Evidemment nous manquons de détails sur les formes acceptés, par exemple 10. est-il valide, y a-t-il vraiment un maximum de deux chiffres avant/après la virgule, etc... :?:
--
Jedaï
Ah ah, ce bon vieux Jedai, toujours au service de la veuve et de l'orphelin
:wink: :wink: :wink:
Ben ca c'est de la réponse. Sympa.
J'avais essayer l'expression suivante :
Mais malheureusement des entrées comme 100 ne marche pas. Bon je pourais tester la valeur -99.99<=X<=99.99Code:^[+-]?[0-9]+\.?[0-9]*$
mais je voulais savoir si c'était possible avec une expression régulière.
Si tu tiens à ce qu'il y ait maximum 2 chiffres après/avant la virgule (le point ici), tu peux le faire avec une regex :
--Code:/^[+-]?\d{1,2}(?:\.\d{1,2})?$/
Jedaï