Général

Les PCRE

Les POSIX

Pratique

Linux

Spécial php

Les billets de fred

Le TutoDeb sur Expreg.com - Section 3

On continue et ça va se corser !
Dans cette section, on continue à utiliser les regex avec des exemples simples en travaillant avec notre série de symboles déjà connues et en découvrant les nouvelles telles que les intervalles et autres options
cf-> tuto : Les symboles - point N°4

1) PREG_MATCH + intervalle de reconnaissance

Motif avec classe de caractères + intervalle de reconnaissance :
<?php
$chaine='1';
if(preg_match('`[0-9]{2}`',$chaine)){ echo 'VRAI'; } else { echo 'FAUX'; }
// affichera FAUX

$chaine='11';
if(preg_match('`[0-9]{2}`',$chaine)){ echo 'VRAI'; } else { echo 'FAUX'; }
// affichera VRAI

$chaine='111';
if(preg_match('`[0-9]{2}`',$chaine)){ echo 'VRAI'; } else { echo 'FAUX'; }
// affichera FAUX
?>

Résultat :
La condition affichera : FAUX - VRAI - FAUX

Explication :
Je viens d'utiliser dans le motif la classe de caractères [0-9] suivie des caractères de l'intervalle {} ainsi que la quantité souhaitée 2
Avec cette syntaxe, on demande simplement à la regex de vérifier que la chaine contient au moins 2 chiffres, ce qui est FAUX dans le premier cas, mais VRAI pour les deux autres. Certains me diront que c'est idiot d'utiliser un intervalle avec un seul chiffre et qu'on pourrait très bien l'écrire comme ceci :
[0-9][0-9] ou \d\d avec les classes génériques PCRE.

Notre exemple est de nouveau simpliste, mais imaginez la tête du motif s'il fallait 8 ou 10 ou 100 chiffres ???
Avec 8 chiffres par exemple, ça donnerait ceci :
[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] ou \d\d\d\d\d\d\d\d

Bref, l'utilité de l'intervalle de reconnaissance va être plus facile à comprendre sur l'exemple suivant.

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

2) PREG_MATCH - Vérifier un mot de passe !

Motif avec classe de caractères + intervalle + ancrage (les ^ $) :
<?php
$chaine='12345678';
if(preg_match('`^[0-9]{3,8}$`',$chaine)){ echo 'VRAI'; } else { echo 'FAUX'; }
// affichera VRAI

$chaine='99';
if(preg_match('`^[0-9]{3,8}$`',$chaine)){ echo 'VRAI'; } else { echo 'FAUX'; }
// affichera FAUX

$chaine='78965';
if(preg_match('`^[0-9]{3,8}$`',$chaine)){ echo 'VRAI'; } else { echo 'FAUX'; }
// affichera VRAI
?>

Résultat :
La condition affichera : VRAI - FAUX - VRAI

Explication :

Le motif d'abord
'`^[0-9]{3,8}$`'

On demande au moteur de regex de vérifier si la chaine :
^ marque le début de la chaine sujet
[0-9] classe de caractères - les chiffres
{3,8} intervalle de reconnaissance 3 chiffres minimum et 8 maximum
$ la chaine se termine ici

Avec les classes génériques PCRE, on aurait pu écrire notre motif comme ceci :
'`^\d{3,8}$`'

- 1er cas => VRAI
La chaine commence bien par un chiffre, il y en a au moins 3 et pas plus de 8 au maximum.
Elle se termine bien par un chiffre.
- 2ème cas => FAUX
La chaine commence bien par un chiffre et elle se termine bien par un chiffre.
Par contre, elle n'en contient que deux alors qu'on en veut 3 au minimum.
- 3ème cas => VRAI
La chaine commence bien par un chiffre et elle se termine bien par un chiffre.
Le nombre de chiffre qu'elle contient est bien compris entre 3 minimum et 8 maximum.

C'est bien beau tout ça, mais nous, on veut vérifier un mot de passe avec des chiffres, des lettres en majuscules ou en minuscules.

3) PREG_MATCH - Vérification d'un mot de passe - Situation réelle !

Motif pour vérifier un mot de passe :
<?php
$chaine='Ar345Hu78';
if(preg_match('`^[a-zA-Z0-9]{3,8}$`',$chaine))
{ echo 'VRAI'; } else { echo 'FAUX'; }
// affichera VRAI

$chaine='aaaaaaaa';
if(preg_match('`^[a-zA-Z0-9]{3,8}$`',$chaine))
{ echo 'VRAI'; } else { echo 'FAUX'; }
// affichera VRAI

$chaine='12345678';
if(preg_match('`^[0-9]{3,8}$`',$chaine))
{ echo 'VRAI'; } else { echo 'FAUX'; }
// affichera VRAI
?>

Résultat :
La condition affichera : VRAI - VRAI - VRAI

Explication :
Ce sont les mêmes que dans l'exemple 1 et 2

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

ADAM Benjamin 2008 | Admin