[Regex] pour un décimal strictement positif

Résolu/Fermé
Shadowrus Messages postés 4 Date d'inscription jeudi 15 novembre 2012 Statut Membre Dernière intervention 16 novembre 2012 - 15 nov. 2012 à 13:52
Shadowrus Messages postés 4 Date d'inscription jeudi 15 novembre 2012 Statut Membre Dernière intervention 16 novembre 2012 - 16 nov. 2012 à 11:03
Bonjour à tous,

voilà, je recherche une expression régulière qui permettrait de tester qu'une chaîne de caractères représente un décimal strictement positif, et dont la valeur entière et la valeur décimale sont séparées par une virgule.
Sachant que l'on peut aussi avoir un nombre entier simple.

En gros, on doit pouvoir accepter :
1,2
0,00001
546,21165
853

Et refuser :
1.6
0
-3,6

J'ai réussi à faire une regexp qui permet de tester le nombre ainsi que la présence de la virgule :
^[0-9]+(,[0-9])?$

Par contre, je ne sais pas comment la modifier pour refuser la valeur 0 (ou 0,0, ou 0,00000).

D'avance merci pour votre aide.
Céline

1 réponse

Shadowrus Messages postés 4 Date d'inscription jeudi 15 novembre 2012 Statut Membre Dernière intervention 16 novembre 2012 1
15 nov. 2012 à 16:01
Je crois avoir trouvé la solution :

^(([1-9]+(,[0-9]+)?)|([0-9]+(,[0-9]*[1-9][0-9]*)))$ 


N'hésitez pas si vous avez des solutions optimisées :-)

J'ai testé mon expression régulière sur ce site et elle semble bien faire ce que je veux: http://www.annuaire-info.com/outil-referencement/expression-reguliere/
1
KX Messages postés 16760 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
15 nov. 2012 à 16:16
"J'ai testé mon expression régulière sur ce site et elle semble bien faire ce que je veux"
Je viens de regarder et avec l'expression régulière quetu nous as donné ça n'accepte rien !

Chaîne 1: 1,2
Résultat : faux

Chaîne 2: 0,00001
Résultat : faux

Chaîne 3: 546,21165
Résultat : faux

Chaîne 4: 853
Résultat : faux

Voici qui devrait être mieux :
^0*([1-9][0-9]*)$|^0*([1-9][0-9]*,[0-9]*[1-9])0*$|^0*(0,[0-9]*[1-9])0*$
0
Shadowrus Messages postés 4 Date d'inscription jeudi 15 novembre 2012 Statut Membre Dernière intervention 16 novembre 2012 1
Modifié par Shadowrus le 15/11/2012 à 16:31
Merci pour ta réponse, mais je viens de refaire le test sur le site, et j'ai des vrai pour chacun de tes exemples avec mon expression régulière (testé avec Chrome) :

Je pense que tu as laissé un espace derrière l'expression régulière quand tu l'as copiée.

Modèle testé : ^(([1-9]+(,[0-9]+)?)|([0-9]+(,[0-9]*[1-9][0-9]*)))$

Options du modèle : aucune
Chaîne 1: 1,2

Résultat : vrai
Capture 1 : 1,2
Capture 2 : 1,2
Capture 3 : ,2
Chaîne 2: 0,00001

Résultat : vrai
Capture 1 : 0,00001
Capture 2 :
Capture 3 :
Capture 4 : 0,00001
Capture 5 : ,00001
Chaîne 3: 546,21165

Résultat : vrai
Capture 1 : 546,21165
Capture 2 : 546,21165
Capture 3 : ,21165
Chaîne 4: 853

Résultat : vrai
Capture 1 : 853
Capture 2 : 853


J'ai aussi optimisé ma regexp de cette façon :
^(([1-9]+(,[0-9]+)?)|(0+(,[0-9]*[1-9][0-9]*)))$

avec cette expression, je teste si ma chaîne est un nombre décimal supérieur à 1 ou s'il s'agit d'un nombre qui commence par 0 et qui présente au moins une décimale différente de 0.
0
KX Messages postés 16760 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
15 nov. 2012 à 17:06
Je suis d'accord pour l'espace en trop ^^

Cependant ton expression régulière a beaucoup trop de captures (les parenthèses), qui parfois se chevauchent, ou pire ne sont pas égales !
Normalement tu devrais n'avoir qu'une seule capture valide, et les autres devraient être vides.

Chaîne : 5,2
Résultat : vrai
Capture 1 : 5,2
Capture 2 : 5,2
Capture 3 : ,2

De plus je trouve dommage de ne pas accepter les zéros avant comme dans "01,2" alors que tu acceptes les zéros après comme dans "1,20". La regexp que j'avais donné acceptait ses deux exemples, et la capture était faite uniquement sur la partie utile :

Chaîne: 01,2
Résultat : vrai
Capture 1 :
Capture 2 : 1,2

Chaîne: 1,20
Résultat : vrai
Capture 1 :
Capture 2 : 1,2
0
Shadowrus Messages postés 4 Date d'inscription jeudi 15 novembre 2012 Statut Membre Dernière intervention 16 novembre 2012 1
16 nov. 2012 à 11:03
D'accord, merci beaucoup pour ton aide, je vais donc utiliser ta reg exp :-).
0

Discussions similaires