Simplifier un preg_match

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Simplifier un preg_match

Re: Simplifier un preg_match

par sirakawa » 19 juin 2012, 12:40

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

Re: Simplifier un preg_match

par nicowizz » 19 juin 2012, 10:54

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

par sirakawa » 18 juin 2012, 18:01

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

par sam12 » 18 juin 2012, 16:22

Sûrement pour savoir dans quel cas on est :P (vieille ou ancienne plaque).

Re: Simplifier un preg_match

par sirakawa » 18 juin 2012, 09:59

Si ton expression régulière est correcte, à quoi sert le test sur la longueur?

Simplifier un preg_match

par nicowizz » 18 juin 2012, 09:56

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