Général

Les PCRE

Les POSIX

Pratique

Spécial php

Les billets de fred

Le TutoDeb sur Expreg.com - Section 2

Je suis une banane en regex, une vraie bille, bref j'y connais que dalle... faut qu'on m'aide là !

 On continue sur le même principe avec notre recherche suivie d'une condition pour vérifier.
Dans cette section, on va vraiment commencer à utiliser les regex en travaillant avec notre série de symboles et en utilisant les classes de caractères [0-9] et [a-z]
>>> cf-> tuto : Les symboles - point N°5

Une regex + classes de caractères pour vérifier une chaine chiffrée !

1) PREG_MATCH + classe de caractères [0-9]

Motif avec classe de caractères :
<?php
$chaine='1515';
if(preg_match('`[0-9]`',$chaine)){ echo 'VRAI'; } else { echo 'FAUX'; }
?>

Résultat :
La condition affichera : VRAI

Explication :
Je viens d'utiliser dans le motif la classe de caractères [0-9]
Avec cette classe, on demande simplement à la regex de vérifier que la chaine contient au moins un chiffre, peu importe lequel.

Recopiez cet exemple sur un page et testez en changeant la classe de caractères pour [a-z], la condition affichera FAUX.

============================================

2) PREG_MATCH + classe [0-9] + ancrage début de chaine ^

Motif avec classe de caractères + ancrage de début de chaine (le ^) :
<?php
$chaine='1515';
if(preg_match('`^[0-9]`',$chaine)){ echo 'VRAI'; } else { echo 'FAUX'; }
?>

Résultat :
La condition affichera : VRAI

Explication :
En ajoutant simplement le ^ devant ma classe de caractères, je demande au moteur d'expressions régulières de chercher si la chaine débute bien par un chiffre.

============================================

3) PREG_MATCH + classe [0-9] + ancrage de fin de chaine $

Motif avec classe de caractères + ancrage de fin de chaine (le $) :
<?php
$chaine='1515';
if(preg_match('`[0-9]$`',$chaine)){ echo 'VRAI'; } else { echo 'FAUX'; }
?>

Résultat :
La condition affichera : VRAI

Explication :
Comme pour l'exemple précédent, en mettant le $ après la classe, je demande au moteur d'expressions régulières de chercher si la chaine se termine par un chiffre.

============================================

4) PREG_MATCH + classe [0-9] + ancrage de début ^ et fin de chaine $

Motif avec classe de caractères + ancrage de début et fin de chaine (les ^ $) :
<?php
$chaine='1515';
if(preg_match('`^[0-9]$`',$chaine)){ echo 'VRAI'; } else { echo 'FAUX'; }
?>

Résultat :
La condition affichera : FAUX

Explication :
Faux ????   Mince alors !
Mais pourquoi, ma chaine commence bien par un chiffre et se termine aussi par un chiffre !!!
Oui en effet, mais la chaine contient plus d'un chiffre, on va donc devoir commencer à utiliser les quantificateurs tels que * + ? et les intervalles de reconnaissance {1}, {1,3} etc...

Que se passe t'il réellement dans le moteur d'expressions régulières ?
En fait, sans mettre de quantificateurs, le moteur cherche une chaine qui commence et qui se termine par un seul et unique chiffre ! Soit une chaine du genre : 1 ou 5 ou 8.

Pour que notre condition soit VRAI, il faut simplement ajouter un quantificateur * ou + dans le motif de la regex, comme ceci :
'`^[0-9]+$`'

Faites le test maintenant et vous verrez que la condition va retourner VRAI

============================================

5) PREG_MATCH + classe [a-z] + ancrage de début ^ et fin de chaine $

Dans cet exemple, on va mettre directement en pratique ce qu'on vient de voir.
On va tester un pseudo !
Vérifier un pseudo : classe de caractères + ancrage début et fin de chaine (les ^ $) :
<?php
$chaine='banane';
if(preg_match('`^[a-z]+$`',$chaine)){ echo 'VRAI'; } else { echo 'FAUX'; }
?>

Résultat :
La condition affichera : VRAI

Explication :
Simple, notre chaine est bien composée de caractères alphabétiques compris entre a et z.

Que se passerait-il si j'avais une majuscule dans mon pseudo ?
<?php
$chaine='Banane';
if(preg_match('`^[a-z]+$`',$chaine)){ echo 'VRAI'; } else { echo 'FAUX'; }
?>

Faites le test maintenant et vous verrez que la condition va retourner FAUX
Ah mince alors, ça ne fonctionne plus !

Pas de panique, c'est pas grave ! Si vous vous souvenez du début de ce tuto, sur la page d'accueil, je vous ai parlé des options des PCRE.
C'est ici quelles vont entrer en action !
La plus simple de toute, la plus facile à retenir et celle dont on a besoin ici est l'option i, pour insensible à la casse
Vous vous rappelez également lorsque je vous ai parlé des délimiteurs et des options...

On va appliquer :
<?php
$chaine='Banane';
// On pourrait le faire comme ceci avec une classe plus longue [a-zA-Z]
//
if(preg_match('`^[a-zA-Z]+$`',$chaine)){ echo 'VRAI'; } else { echo 'FAUX'; }
//
//--- Exemple 2, avec la classe normale [a-z] et l'option i
//
if(preg_match('`^[a-z]+$`i',$chaine)){ echo 'VRAI'; } else { echo 'FAUX'; }
?>

Vous avez vu, avec le second exemple le i a été ajouté après le délimiteur ` ?
Et voilà, notre condition affiche maintenant VRAI pour les deux tests
C'est identiquement la même chose avec la classe [a-zA-Z] sans le i.

============================================
Voilà, cette partie n'a pas été beaucoup plus compliquée que la première, mais la suite va venir.

Résumé :
- Vous avez appris à utiliser une classe de caractères [0-9] ou [a-z] ou [a-zA-Z]
- Vous avez revu l'emploi des ancrages de début ^ et de fin de chaine $.
- Vous avez découvert l'emploi des quantificateurs * + ?
- Vous avez découvert l'emploi d'une première option le i

Partie 3 >>
 
ADAM Benjamin 2008 | Admin