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
L'équivalence et les fonctions standards
Description de l'équivalence
Il est toujours très attractif pour celui qui aime les regex de se laisser aller à sa passion dans, quasi, tous les cas de figure. C'est très tentant en effet !Mais il faut avouer qu'il est idiot de vouloir réinventer la roue à chaque instant et c'est pour cette raison que j'aborde ce petit chapitre sur l'équivalence.
Pourquoi faire une regex alors que PHP possède des fonctions natives qui réalisent le même travail ?
Comme dit ci-dessus, c'est totalement idiot !
Dans le traitement des chaînes de caractères, la règle à suivre est la suivante :
Règle générale:
Il faut toujours privilégier la fonction standard PHP à la création d'une regex effectuant le même travail.Exemples d'équivalences
| Fonction PHP | Même fonction Regex |
| nl2br($ch) | preg_replace("\n",'` `',$ch); |
| ltrim($ch) | preg_replace('`^\s+`','',$ch); |
| strcmp($ch1,$ch2) | preg_match('`^'.$ch1.'$`',$ch2); |
| strip_tags($ch) | preg_replace('`<[^>].+>`','',$ch); |
| stripslashes($ch) | preg_replace('`\\\`','',$ch); |
| strtok($ch,$op) | preg_split('`'.$op.'`',$ch); |
| strtr($ch, 'a','@') | preg_replace('`a`','@',$ch); |
N'oubliez d'ailleurs pas une des fonctions principales de substitution en php
str_replace();
Dans bien des cas, elle fera des merveilles en lieu et place de ereg_replace() ou preg_replace()
Allez, dans la foulée, je vous donne quelques fonctions standard et leur description
Tableau des fonctions standard
| Libellé | Descriptif |
| nl2br(); | remplace les sauts de ligne \n par la balise xhtml |
| ucfirst(); | mise en majuscule du premier caractères de la chaîne |
| ucwords(); | mise en majuscule du premier caractère de chaque mot de la chaîne |
| strtoupper(); | mise en majuscules de la chaîne |
| strtolower(); | mise en minuscules de la chaîne |
| wordwrap(); | fonction qui ajoute la césure (voir manuel php - fonction wordwrap) |
| substr_replace() | substr_replace($ch1,$ch2,$pos,$n) remplace $n caractères depuis $pos dans $ch1 par $ch2 |
| substr_count() | substr_count($ch1,$ch2) compte le nombre d'occurrences de $ch2 dans $ch1 |
| strpos() | strpos($ch1,$ch2[,$n]) recherche la première occurrence $ch2 dans la chaine $ch1 à partir de la position $n (par défaut au début) |
| strrpos() | strrpos($ch1,$ch2) même principe que strpos mais un caractère en partant de la fin de la chaîne. |
| strrev() | strrev($ch1) inversion de la chaîne |
| str_repeat() | str_repeat($ch1,$n) répète la chaîne $ch1 autant de fois que la valeur de $n |
| str_pad() | str_pad($ch1,$n [,$ch2 [,$type]]) complète la chaîne $ch1 avec $n fois $ch2 ou $n espaces par défaut en fin de chaîne par défaut. Le quatrième argument $type permet de spécifier l'endroit de l'ajout : STR_PAD_LEFT ==> pour ajouter au début, STR_PAD_BOTH ==> pour ajouter de chaque côté de la chaîne. |
| strlen() | strlen($ch1) retourne la taille d'une chaîne (nombre de caractères) |
| ord() | ord($car) retourne la valeur ASCII du caractère |
| chr() | chr($car) fonction réciproque de la fonction ord() |
| chunk_split() | chunk_split($ch1 [,$n [,$ch2]]) découpe (morcelle) la chaîne $ch1 tous les $n caractères par insertion de $ch2 |
| strtok() | strtok($ch1,$sep) découpe (morcelle) la chaîne via le séparateur $sep |
| explode() | explode($sep,$ch1 [,$n]) scinde la chaîne $ch1 en au plus $n éléments en utilisant le séparateur $sep. Cette fonction retourne un tableau. |
| implode() | implode($sep,$ch1) fonction réciproque de explode. Retourne une chaîne de caractères en utilisant le séparateur |
| ltrim() | ltrim($ch1) supprime les espaces en début de la chaîne |
| rtrim() | rtrim($ch1) supprime les espaces en fin de la chaîne |
| trim() | trim($ch1) supprime les espaces en début et fin de la chaîne |
| htmlentities() | htmlentities($ch1) convertit tous les caractères spéciaux en leur entité HTML : exemple < devient < voir aussi htmlspecialchars() |
| addslashes() | addslashes($ch1) échappe les caractères " et ' en les faisant précéder d'un antislash \ |
| stripslashes() | stripslashes($ch1) réciproque de addslashes() enlève les \ |
| quotemeta() | quotemeta($ch1) ajoute un antislash devant les caractères suivants : . \\ + * ? [^] ($) |
| strstr() | strstr($ch1,$ch2) retourne le contenu de $ch1 depuis la première occurrence de $ch2 jusqu'à la fin de la chaîne. |
| strstr() | stristr($ch1,$ch2) identique à strstr mais insensible à la casse.. |
| strchr() | strchr($ch1,$ch2) retourne le contenu de $ch1 depuis la dernière occurrence de $ch2 jusqu'à la fin de la chaine. |
| substr() | strstr($ch1,$i, [,$n]) retourne une sous-chaîne de $ch1 débutant à la position $i jusqu'à la position $n |
| strcmp() | strcmp($ch1,$ch2) compare en binaire les deux chaînes - Retourne un entier positif si $ch1>$ch2, négatif si $ch1<$ch2 et nul si $ch1=$ch2 |
| strncmp() | strncmp($ch1,$ch2,$i) compare en binaire les deux chaînes sur les $n premiers caractères - Retourne un entier positif si $ch1>$ch2, négatif si $ch1<$ch2 et nul si $ch1=$ch2 |
| strcasecmp() | strcasecmp($ch1,$ch2) comme strcmp mais insensible à la casse |
| strncasecmp() | strncasecmp($ch1,$ch2) comme strncmp mais insensible à la casse |
| strnatcmp() | strnatcmp($ch1,$ch2) comme strcmp mais dans l'ordre naturel |
| strnatcasecmp() | strnatcasecmp($ch1,$ch2) comme strcasecmp mais dans l'ordre naturel |
Il y en a d'autres que je vous laisse le soin d'aller visiter à cette adresse :
>>> Cf->Doc PHP : Chaînes de caractères
