Regexp avec longueur différente

altergo
Invité n'ayant pas de compte PHPfrance

27 juil. 2010, 21:12

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.

ViPHP
ViPHP | 4039 Messages

27 juil. 2010, 21:37

17 ou 24 ou 17 à 24 ?

Ceci dit, en regex, tu as quelque chose qui ressemble à un ou logique.. :wink:
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

altergo
Invité n'ayant pas de compte PHPfrance

27 juil. 2010, 21:40

Il valide soit 17 soit 24 caracteres.

altergo
Invité n'ayant pas de compte PHPfrance

27 juil. 2010, 22:18

Ne fonctionne pas :
preg_match("!^[0-9A-B]{17}{17|24}$!",$str)
preg_match("!^[0-9A-B]{17}{17}|{24}$!",$str)
:roll:

ViPHP
ViPHP | 4039 Messages

28 juil. 2010, 10:21

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é.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

altergo
Invité n'ayant pas de compte PHPfrance

28 juil. 2010, 11:26

ok..
preg_match("!^([0-9A-B]){17}|([0-9A-B]){24}$!",$str)
non plus ! Je suis proche ? :D

altergo
Invité n'ayant pas de compte PHPfrance

28 juil. 2010, 11:31

preg_match("!^([0-9A-B]{17})|([0-9A-B]{24})$!",$str)
non plus :evil:

altergo
Invité n'ayant pas de compte PHPfrance

28 juil. 2010, 18:38

SVP ?

ViPHP
ViPHP | 4039 Messages

28 juil. 2010, 22:09

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
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.