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.
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part /^\+|-?
si contient une valeur numérique suivie éventuellement d'un point et se termine éventuellement par une valeur numérique
Code : Sélectionner tout - Visualiser dans une fenêtre à part [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
![]()
![]()
![]()
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.99
Code : Sélectionner tout - Visualiser dans une fenêtre à part ^[+-]?[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 : Sélectionner tout - Visualiser dans une fenêtre à part /^[+-]?\d{1,2}(?:\.\d{1,2})?$/
Jedaï
Partager