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
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 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 >>
