Général
- Présentation
- Les Symboles
- Les Métacaractères
- Les Ancres et Classes
- Les options
- Constantes prédéfinies
- Equivalences
- Créer un motif
- Les POSIX
- Les PCRE
- Les Plus des PCRE
- Les Assertions Part I
- Les Assertions Part II
- Motif conditionnel
- Mysql et les regex
- Url Rewriting
- Optimisation
- Aide mémoire
Les PCRE
Les POSIX
Pratique
Linux
Spécial php
- Conseils et Astuces
- Délimiteur PCRE
- Créer une bdd
- Utiliser du BBcode
- Le binaire
- Faire un panier
- Cases à cocher
- Citations imbriquées
- Colorateur syntaxique
- Les list-box ou combo-box
- Faire un diaporama
- Isset ou empty ?
- Une légende au survol
- Site en plusieurs langues
- Requêtes dynamiques
- Gestion des smiley
- Faire un moteur de template
- Timestamp php/mysql
- Timestamp mysql
- Matcher une adresse email
- Controler des données
Les billets de fred
- Les POSIX... mise en pratique !
- Limiter l'accès à un répertoire
- Alternance de couleurs
- Magic_quotes
- Désactiver les short_tags
- Require ou include : Bench
- Cohérence dans les chaines de caractères
- "echo" : lapin ou tortue ?
- Gérer un formulaire avec plusieurs boutons
- Le formulaire a t'il été soumis ?
- J'ai décidé de grossir
- La guerre des étoiles
- La guerre des boutons
- Headers already sent
- IP, IP, IP, houra !
- Créer un itérateur avec PHP5
- On vous conduit vers la lumière
- Comment utiliser MySQL avec PHP
- Non aux booléens !
- Php.ini : dist /recommended
- Include : gouffre ou fêlure ?
- Simple comme les sessions !
- Simplifier le traitement des erreurs
- Structurez vos applications
- Franchement, t'es trop for !
- Notice: Undefined variable (ou index)
- Proscrire les variables auto déclarées
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
============================================
