Soutenez-nous

FAQ PHPConsultez toutes les FAQ

Nombre d'auteurs : 68, nombre de questions : 580, dernière mise à jour : 29 juillet 2013 

 
OuvrirSommaireExpressionsExpressions régulières

Pour enlever des espaces en trop dans une chaîne de caractères, il faut utiliser la fonction preg_replace (masque, replace, chaine) qui analyse chaine pour trouver l'expression rationnelle masque et remplace les résultats par replace.
Exemple :

 
Sélectionnez
$txt = "C e c i est un e x e m p l e";
echo preg_replace('#\s(\w)(?!\w)#', '$1', $txt); //Affiche Ceci est un exemple
Mis à jour le 4 août 2008  par BiD0uille

Lien : Tutoriel : Initiation aux expressions régulières en PHP, par Guillaume Rossolini
Lien : Tutoriel : Les expressions régulières et manipulation de chaînes standards, par Hugo Étiévant

Pour tester l'extension d'un fichier, il faut utiliser la fonction preg_match(string masque, string chaine) qui analyse chaine pour trouver l'expression qui correspond à masque Par exemple, est-ce qu'un fichier est bien un .jpg :

 
Sélectionnez
preg_match('/\.jpg$/', $fichier);
Mis à jour le 4 août 2008  par BiD0uille

Lien : Tutoriel : Initiation aux expressions régulières en PHP, par Guillaume Rossolini
Lien : Tutoriel : Les expressions régulières et manipulation de chaînes standards, par Hugo Étiévant

Voici quelques exemples d'expressions régulières parsant des BBCodes :

BBCode [b]Forum Developpez.com[/b]
Sélectionnez

$str = "[b]Forum Developpez.com[/b]";
echo preg_replace('#\[b\](.*)\[/b\]#Usi', '<b>$1</b>', $str);
BBCode [i]Forum Developpez.com[/i]
Sélectionnez

$str = "[i]Forum Developpez.com[/i]";
echo preg_replace('#\[i\](.*)\[/i\]#Usi', '<i>$1</i>', $str);
BBCode [url]http://www.developpez.net[/url]
Sélectionnez

$str = "[url]http://www.developpez.net[/url]";
echo preg_replace('#\[url\](.*)\[/url\]#Usi', '<a href="$1">$1</a>', $str)."<br>";
BBCode [url=http://www.developpez.net]Forum Developpez.com[/url]
Sélectionnez

$str = "[url=http://www.developpez.net]Forum Developpez.com[/url]";
echo preg_replace('#\[url=([^\]]*)\](.*)\[/url\]#Usi', '<a href="$1" title="$2">$2</a>', $str);
BBCode [color=#FF0000]Forum Developpez.com[/color]
Sélectionnez

$str = "[color=#FF0000]Forum Developpez.com[/color]";
echo preg_replace('#\[color=([^\]]*)\](.*)\[/color\]#Usi', '<font color="$1">$2</font>', $str);
BBCode [quote]Forum Developpez.com[/quote]
Sélectionnez

$str = "[quote]Forum Developpez.com[/quote]";
$quote = '<div style="width:50%;background-color:#CCCCCC"><div style="background-color:#FFFFFF">Citation :</div>';
$quote .= '<div style="background-color:#CC0000">$1</div></div>';
echo preg_replace('#\[quote\](.*)\[/quote\]#Usi', $quote, $str);
BBCode [quote=FAQ]Forum Developpez.com[/quote]
Sélectionnez

$str = "[quote=FAQ]Forum Developpez.com[/quote]";
$quote = '<div style="width:50%;background-color:#CCCCCC"><div style="background-color:#FFFFFF">Citation :</div>';
$quote .= '$1 a écrit :<div style="background-color:#CC0000">$2</div></div>';
preg_replace('#\[quote=([^\]]*)\](.*)\[/quote\]#Usi', $quote, $str);
Mis à jour le 12 septembre 2006  par Forum PHP, Kerod

Lien : Tutoriel : Initiation aux expressions régulières en PHP, par Guillaume Rossolini
Lien : Tutoriel : Les expressions régulières et manipulation de chaînes standards, par Hugo Étiévant

Pour insérer une chaîne de caractères dans une autre déjà existante, on peut utiliser une expression régulière comme celle qui suit

 
Sélectionnez
preg_replace('#(\d{'.$x.'})#', '$1'.$chaine, $string);

Avec $chaine, la chaîne de caractères à ajouter et $x, la fréquence d'insertion (tous les x caractères).
Exemple :

Insertion d'un espace tous les 2 caractères
Sélectionnez
$string = '0123456789';
echo preg_replace('#(\d{2})#', '$1 ', $string); //Affiche 01 23 45 67 89
Mis à jour le 8 mars 2011  par Forum PHP

Lien : Tutoriel : Initiation aux expressions régulières en PHP, par Guillaume Rossolini
Lien : Tutoriel : Les expressions régulières et manipulation de chaînes standards, par Hugo Étiévant
Lien : Comment insérer une chaîne de caractères dans une autre tous les x caractères ?

Pour vérifier que l'on a bien une chaîne de caractères dans une variable, on utilise la fonction preg_match() ou eregi() qui ne respecte pas la casse.
Exemple :

Avec preg_match
Sélectionnez
<?php
$pattern = '#^[a-zA-Zéàèêùôîï]*$#'; //Définition de l'ensemble des caractères acceptés
$chaine = "Test d'une chaîne de caractères";
if(preg_match($pattern, $chaine))
{
    echo $chaine . 'est bien une chaîne valide';
}
else
{
    echo $chaine . 'n\'est pas une chaîne valide';
}
//Affichera que la chaîne est valide.
?>

À noter que ce code est sensible à la casse d'où l'ajout des majuscules dans le pattern. De plus, ni les caractères (exceptés ceux qui sont définis dans $pattern) ni les chiffres ne sont acceptés.

Mis à jour le 4 août 2008  par Forum PHP

Lien : Comment vérifier le type d'une chaîne ?
Lien : Tutoriel : Initiation aux expressions régulières en PHP, par Guillaume Rossolini
Lien : Tutoriel : Les expressions régulières et manipulation de chaînes standards, par Hugo Étiévant

Une expression régulière qui vous permettra de reconnaître un nombre est :

 
Sélectionnez
[0-9]+

Une autre, plus directe et donc potentiellement plus rapide :

 
Sélectionnez
\d+
Exemple d'utilisation
Sélectionnez
function verifNombre ($nombre)
{
    if (preg_match ('/^\d+/i', $nombre)) {
        return false;
    } else {
        return true;
    }
}
Mis à jour le 8 mars 2011  par Julien Plu

Lien : Tutoriel : initiation aux expressions régulières en PHP, par Guillaume Rossolini

À l'aide d'un expression régulière et de la fonction preg_replace(), qui analyse une chaîne de caractères pour trouver l'expression à remplacer, on peut supprimer un caractère ou un ensemble de caractères.
En effet, pour réaliser cette opération, on peut utiliser le code suivant :

 
Sélectionnez
$var = 'Jean-Michel'; //Chaîne initiale
$var = preg_replace('/[^a-z0-9]/', '-', $var);  //Remplace tout ce qui n'est ni chiffre ni lettre de l'alphabet par un trait d'union
Mis à jour le 4 août 2008  par Forum PHP, Kerod

Lien : Comment remplacer/supprimer un mot/caractère dans une chaîne ?

Pour mettre un effet de surbrillance sur certains mots dans un texte, on peut utiliser la fonction preg_replace qui recherchera et effectuera la surbrillance de l'expression voulu.

Voici un exemple :

Surbrillance de certains pronoms
Sélectionnez
<?php  
  $words = array ('de', 'du', 'des', 'le', 'la', 'les'); //Définition des pronoms à mettre en évidence 
  $str = "L'édition de cette année du 20 au 27 mars partout en France traitera des dernières tendances en vogue, 
          comme le phénomène des blogs ou encore l'internet mobile.";  //Texte à mettre en surbrillance
  echo preg_replace( '/('.implode('|', $words).')/i', '<span style="font-weight: bold; color: red;">$1</span>', $str); 
?>

Et donc ceci affichera :

L'édition de cette année du 20 au 27 mars partout en France traitera des dernières tendances en vogue, comme le phénomène des blogs ou encore l'internet mobile.

Remarque :

 
Sélectionnez
implode('|', $words)

Cette instruction sert à transformer le tableau $words en chaîne de caractères, et chaque pronom sera séparé par le caractère |, qui signifie OU (alias OR), ce qui donnera à l'expression régulière tous les pronoms possibles à remplacer.

Mis à jour le 4 août 2008  par Guillaume Rossolini, Kerod

Lien : Tutoriel : Initiation aux expressions régulières en PHP, par Guillaume Rossolini
Lien : Tutoriel : Les expressions régulières et manipulation de chaînes standards, par Hugo Étiévant

Vous pouvez utiliser la fonction personnalisée suivante qui se base sur les expressions régulières pour remplacer les caractères accentués une fois convertis en entités HTML.

 
Sélectionnez
function remove_accents($str, $charset='utf-8') {
 
    $str = htmlentities($str, ENT_NOQUOTES, $charset);
 
    $str = preg_replace('#\&([A-za-z])(?:acute|cedil|circ|grave|ring|tilde|uml)\;#', '\1', $str);
    $str = preg_replace('#\&([A-za-z]{2})(?:lig)\;#', '\1', $str); // pour les ligatures e.g. '&oelig;'
    $str = preg_replace('#\&[^;]+\;#', '', $str); // supprime les autres caractères
 
    return $str;
}
Créé le 24 septembre 2009  par s.n.a.f.u
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2003 Developpez.com Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.