Page 1 sur 1

Simplifier un preg_match

Posté : 18 juin 2012, 09:56
par nicowizz
Bonjour,

Je dois tester les 2 formats d'immatriculation (ancienne et nouvelle) de voiture avec ses 2 lignes :

Code : Tout sélectionner

(strlen($str) <= 9 && (bool)preg_match('~\d{1,4}\s*[a-z]{1,4}\s*\d{1,2}~iu', $str))

Code : Tout sélectionner

(strlen($str) <= 7 && (bool)preg_match('~[a-z]{1,2}\s*\d{1,3}\s*[a-z]{1,2}~iu', $str))
Auriez-vous une idée de comment faire pour les regrouper en une seule ?

Merci d'avance

Re: Simplifier un preg_match

Posté : 18 juin 2012, 09:59
par sirakawa
Si ton expression régulière est correcte, à quoi sert le test sur la longueur?

Re: Simplifier un preg_match

Posté : 18 juin 2012, 16:22
par sam12
Sûrement pour savoir dans quel cas on est :P (vieille ou ancienne plaque).

Re: Simplifier un preg_match

Posté : 18 juin 2012, 18:01
par sirakawa
mais, gros malin, si tu veux joindre les deux regexp, tu n'auras plus besoin du test de longueur....
un truc dans ce goût:
<?PHP
$str = "toto";
$resultat = array();
$masque = "~((\d{1,4}\s*[a-z]{1,4}\s*\d{1,2})|(toto))~iu";
$bon = preg_match($masque, $str, $resultat);


print "$bon";

?>

Re: Simplifier un preg_match

Posté : 19 juin 2012, 10:54
par nicowizz
Oui le test de la longueur dépend s'il s'agit d'une ancienne ou nouvelle plaque, j'aimerai garder ce test.

Code : Tout sélectionner

(strlen($str) <= 9 && (bool)preg_match('~\d{1,4}\s*[a-z]{1,4}\s*\d{1,2}~iu', $str))
Je n'ai pas compris sur php.net à quoi servait le u de ~iu'.

Merci d'avance

Re: Simplifier un preg_match

Posté : 19 juin 2012, 12:40
par sirakawa
mais si tu gardes le test de longueur tu n'as pas besoin de joindre tes deux regexp: il suffit de te servir du booléen résultat du premier test pour savoir s'il faut faire le deuxième.
$categorie = "AUCUNE";
if (ton test sur les anciennes qui fonctionne) // c'est une ancienne
{
$categorie = "ANCIENNE";
}
else // ce n'est pas une ancienne
{
$categorie = (ton test sur les nouvelles) ? "NOUVELLE": categorie;
}
i : insensible à la casse