Page 1 sur 1

Regexp avec longueur différente

Posté : 27 juil. 2010, 21:12
par altergo
Bonjour,

J'aimerai valider en php avec des regexp cette expression :
preg_match("!^[0-9A-B]!",$str)
(pour des numeros de reference)
Je prend donc que de 0 à 9 et A et/ou B.
Mon soucis est que ces references peuvent etre de 17 ou 24 caracteres.
preg_match("!^[0-9A-B]{17}$!",$str)
fonctionne bien, mais comment faire pour 24 ?
preg_match("!^[0-9A-B]{17}{24}$!",$str)
ne fonctionne pas !

Merci pour votre aide.

Re: Regexp avec longueur différente

Posté : 27 juil. 2010, 21:37
par Berzemus
17 ou 24 ou 17 à 24 ?

Ceci dit, en regex, tu as quelque chose qui ressemble à un ou logique.. :wink:

Re: Regexp avec longueur différente

Posté : 27 juil. 2010, 21:40
par altergo
Il valide soit 17 soit 24 caracteres.

Re: Regexp avec longueur différente

Posté : 27 juil. 2010, 22:18
par altergo
Ne fonctionne pas :
preg_match("!^[0-9A-B]{17}{17|24}$!",$str)
preg_match("!^[0-9A-B]{17}{17}|{24}$!",$str)
:roll:

Re: Regexp avec longueur différente

Posté : 28 juil. 2010, 10:21
par Berzemus
Ne fonctionne pas :
:roll:
Parce qu'il est mal utilisé..

Le sigle "|" s'utilise ainsi:

#(regex1|regex2)#

Ainsi, ce sera soit le masque "regex1" soit le masque "regex2" qui sera employé.

Re: Regexp avec longueur différente

Posté : 28 juil. 2010, 11:26
par altergo
ok..
preg_match("!^([0-9A-B]){17}|([0-9A-B]){24}$!",$str)
non plus ! Je suis proche ? :D

Re: Regexp avec longueur différente

Posté : 28 juil. 2010, 11:31
par altergo
preg_match("!^([0-9A-B]{17})|([0-9A-B]{24})$!",$str)
non plus :evil:

Re: Regexp avec longueur différente

Posté : 28 juil. 2010, 18:38
par altergo
SVP ?

Re: Regexp avec longueur différente

Posté : 28 juil. 2010, 22:09
par Berzemus
preg_match("!^([0-9A-B]{17})|([0-9A-B]{24})$!",$str)
non plus :evil:
C'est normal, moi je vois ^masque1|masque2$"
Or, la bonne utilisation est ^(masque1|masque2)$
Les parenthèses font partie intégrante du "ou".

Ceci dit, tu as besoin d'une répétition de une fois A ou B. Or, avec les masques que tu utilises, c'est 17 ou 24 fois des chiffres ou A ou B.

Ceci serait valide:
1273914209384918A
Mais ceci aussi, du coup:
1B73B14A0A3B49A8A