REGEX . Liste des pages à imprimer [Résolu]

Signaler
Messages postés
189
Date d'inscription
vendredi 28 mai 2004
Statut
Membre
Dernière intervention
27 novembre 2015
-
Messages postés
189
Date d'inscription
vendredi 28 mai 2004
Statut
Membre
Dernière intervention
27 novembre 2015
-
Bonjour,

j'essaye vainement de créer un pattern pour un regex Pouvez vous m'aider ?

But : vérifier qu'une chaine ressemble à ce que l'on peut saisir dans la textbox "Pages" de Word. En clair qq chose du style :
   - 1
   - 1-10
   - 1-10;2
   -1-10;15-20
   -1;3;5;15-18
   -1;3;5;15-18;20
   - ...

La différence avec Word est que j'aimerai que ma chaine se termine obligatoirement par un nombre
Ex : 
   - 1;3;5- => interdit
   - 1;3;5-10 => OK

Précision :
   - début : un chiffre obligatoirement (différent de 0) => 0;12 => Interdit
   - fin :  : un chiffre obligatoirement (différent de 0)   =>12;0 => Interdit

J'ai écris ça :  pattern = @"^((\d+[;|\-]{1}\d+)|(\d){1})*$"; mais cette expression ne m'interdit pas "1-12-3"

DT

6 réponses

Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
63
Hello,

Si tu dois travailler avec des regex, télécharge et utilise Expresso, c'est gratuit, et tu peux construi et tester tes regex.

Je pense pour ton problème que
^[1-9]\d*(-[1-9]\d*)?(;[1-9]\d*(-[1-9]\d*)?)*$
devrait fonctionner, essaie.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
63
La manière dont tu as modifié, ça ne marchera pas non plus, car il acceptera un 0 seul.

Avec la suivante, on oblige à avoir au moins un chifrre différent de 0

^\d*[1-9]\d*(-\d*[1-9]\d*)?(;\d*[1-9]\d*(-\d*[1-9]\d*)?)*$

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Messages postés
189
Date d'inscription
vendredi 28 mai 2004
Statut
Membre
Dernière intervention
27 novembre 2015

Merci beaucoup pour ce pattern...

je rencontre juste un petit problème lorsque le premier nombre vaut "012" par exemple (dans mon cas c'est le "0" significatif qui m'interesse et qui doit être interdit).

j'ai donc modifié ton pattern comme ceci et je testerai ensuite la première valeur (à moins qu'il existe une autre manière)
^\d+(-[1-9]\d*)?(;[1-9]\d*(-[1-9]\d*)?)*$

En tous les cas merci beaucoup pour ton aide

DT
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
63
Hello,

Tu veux accepter ou refuser 012 ? Je n'ai pas bien compris.

Mon pattern le refuse pour le moment.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Messages postés
189
Date d'inscription
vendredi 28 mai 2004
Statut
Membre
Dernière intervention
27 novembre 2015

je dois refuser le "0;..." mais accèpter le "012;...". En clair, je ne peux pas sélectionner la page 0 mais je peux accepter que l'utilisateur saisisse 012
DT
Messages postés
189
Date d'inscription
vendredi 28 mai 2004
Statut
Membre
Dernière intervention
27 novembre 2015

rien à redire ...

DT