TUTORIELS 
Les expressions rationnelles avec PHP

Page 1 | 2

Approche progressive d'une méthode de manipulation et de vérification de chaîne extrêmement puissante et standardisée.
 (4 mars 2003)
 

Les fonctions POSIX sont ereg(), ereg_replace(), eregi(), eregi_replace(), split(), spliti() et sql_regcase(). Le "i" à la fin de certaines fonctions signifie simplement que ces fonctions ne sont pas sensibles à la casse (la fonction ne fait pas la différence entre "a" et "A", par exemple). Florilège introductif de quelques unes de leurs possibilités.

ereg() et consoeurs
ereg() est la fonction standard: elle permet de tester la présence d'un ou plusieurs caractères dans une chaîne donnée. Ainsi,

ereg("^_{1}[A-Z]{1}[0-9]{3}$", $chaîne)

...renverra "TRUE" si $chaine contient effectivement une chaîne correspondant au motif que nous avons décrit plus haut. Il ne reste qu'à l'implémenter dans une structure de notre choix. Ainsi, créez une fonction is_mail() qui va nous dire si la chaîne donné est un mail valide syntaxiquement:

<?php
function is_mail($chaine)
  {
  return eregi('^[a-z0-9\._-]+@[a-z0-9\.-]+\.[a-z]{2,3}$', $chaine);
  }
?>

[a-z0-9\._-]+ nous indique qu'avant l'arobase (@), nous acceptons un nombre illimité (à cause de l'usage de "+") de caractères alphanumériques (lettres et chiffres), et les caractères ".", "_" et "-". Idem pour la première partie du nom de domaine, l'extension étant pour sa part limitée à 2 à 3 caractères.

ereg_replace() et eregi_replace() poussent la technique un peu plus loin: au lieu de dire si un motif donné est trouvé dans une chaîne, elles remplacent dans la chaîne les occurrences du motif, par un caractère ou une chaîne donné en deuxième argument de la fonction:

<?php
$chaine = "Il      y   a         trop       d'espaces       !";
$var = eregi_replace(" +", " ", $chaine);
echo $var;
?>

split(), spliti() et sql_regcase()
Ce sont là des fonctions beaucoup plus spécifiques: split() et spliti() décomposent une chaîne en plusieurs sous-chaînes stockées dans un tableau. Ainsi, pour mettre chaque mot d'une chaîne dans un tableau:

<?php
$chaine = split(" ", "Je ne sais pas quoi dire");
?>

sql_regcase(), enfin, "prépare une expression régulière pour effectuer une recherche insensible à la casse", c'est à dire qu'elle construit une expression régulière qui acceptera une motif correspondant à la chaîne spécifiée. Par exemple, pour lancer une recherche sur une base sans avoir à se soucier des accents ni dans la chaîne à chercher, ni dans la base stockée:

<?php
$recherche = sql_regcase($chaine);
$recherche = ereg_replace("eéèêë", "e", $chaine);
$requetesql = "SELECT mot FROM table WHERE champ REGEXP '$recherche';");
?>

Page 1 | 2

 
[ Xavier Borderie,JDNet
 
Accueil | Haut de page