Niveau
..........
En rapport...

Pourquoi faire ?

Admettons que vous aillez une série de test à effectuer sur une chaîne :
ex :

  • Il faut qu'elle contienne plus de 2 caractères
  • Il faut que ce soit uniquement des alphanumériques
  • elle doit contenir au moins une fois la sous-chaîne “hello”

Pour faire ça, vous allez devoir :

  1. tester la chaîne avec un strlen
  2. puis la vérifier avec une expression régulière
  3. et enfin faire un strpos pour trouvé si oui ou non il y a l'occurrence voulu.

La fonction ci-dessous ce charge pour une chaîne donnée de “regarder” si elle correspond ou non a une liste de critères donnée.

code

php
function array_pregmatch($array_pattern, $haystack) {
	/*Cherche une occurrence correspondant a une des regexps dans une chaîne*/
	if (count($array_pattern)==0) return false;
	foreach ($array_pattern as $pattern) {
		/*cas d'une expression régulière*/
		if ($pattern{0}=='/') {
			if (preg_match($pattern, $haystack))
				return true;
		/*cas d'une expression a évaluer*/
		} elseif ($pattern{0}=='#') {
			eval('$r='.str_replace('%s',$haystack,substr($pattern,1)).((substr($pattern,-1)!=';')?';':''));
			if ($r) return true;
		/*cas d'une chaine normale*/
		} else {
			if (strpos($haystack, $pattern)!==false)
				return true;
		}
	}
	return false;
}

Paramètres

  • $array_pattern (variable de type array)
  • $haystack (variable de type string)

array_pattern

$array_pattern est donc un tableau qui va contenir toutes les conditions a appliquer a la chaîne.
ex :

php
$array_pattern[]="#strlen('%s')<=2";
$array_pattern[]="/[A-Za-z0-9_ ]*/";
$array_pattern reconnais 3 type de ligne :

  • Les lignes commençant par un / sont évalué comme expression régulière (format d'expression : PCRE )
  • Les lignes commençant par un #. Il s'agit des lignes à évaluer (typiquement du code php). Utiliser %s pour faire référence à votre chaîne
  • Les autre ligne sont considéré comme des chaînes normales (recherche effectué via strpos)

Exemple

Reprenons les critères cité plus haut et voyons comment les utiliser avec la fonctions

php
$machaine="et hop un petit test pour le wikistuce";
$stop[]="#strlen('%s')<=2";
$stop[]="/[A-Za-z0-9_ ]*/";
$stop[]="hello";
$ret=array_pregmatch($stop, $machaine);
if ($ret==true) {
   echo "au moins une des condition est vérifiée";
} else {
   echo "aucune condition n'est vérifiée";
}

iDo 27/04/2006 14:01