Bienvenue sur le site des Expressions Régulières Icone page d'accueil - Les expressions régulières php Accueil   Icone articles sur les expressions régulières en php Articles d'Expreg - Billets de Fred   Icone nos regex - Les expressions régulières php Les regex d'Expreg Icone mail - Les expressions régulières php



 1) Enlever certains mots  
les regex php d'expreg.com
posté par Yves Maistriaux (ID : 8)

Regex permettant de bannir (ôter) certains mots d'un texte (insultes, injures, etc...) et les remplacer par un autre mot.
Utilise la fonction preg_replace

<?php

$message
="Un petit test pour enlever des mots interdit, 
genre enfoiré, connard et bien d'autres merdes 
du même genre"


$interdit='enfoiré|connard|merde|salaud'
$autre='lol'
$message2 preg_replace('`(^|\W)('.$interdit.')(\W|$)`si','$1 '.$autre.' $3'$message);    
echo 
$message;  

?>



 2) Enlever certains mots V2  
les regex php d'expreg.com
posté par Yves Maistriaux (ID : 9)

Version améliorée - Enlève certains mots d'un texte en tenant compte de la casse, la gestion du pluriel.

Utilisation des ancrages de limite de mot \b (assertion simple)

<?php
$message
='Salaud, c\'est un petit test pour enlever des mots interdits, 
genre enfoirés, connard et bien d\'autres 
merdes même genre'


$interdit='enfoiré|connard|merde|salaud'
$autre='*****'
$message1 preg_replace('`\b('.$interdit.')[sx]?\b`si',$autre$message);    
echo 
'<br>',$message1;  
?>



 3) Mettre du texte en forme entre balises perso  
les regex php d'expreg.com
posté par Yves Maistriaux (ID : 10)

Cette regex permet de mettre en forme du texte (gras, couleur, etc..) seulement s'il est placé entre des balises persos.

Très simple !
Petite explication peut-être : le $1
Cela s'appele une référence arrière et peut être écrite sous cette forme aussi : \\1


<?php

//--- le texte 

$message "Un petit test pour [forme] trouver des textes [/forme]
à mettre en forme, <br />seulement s'il sont placés
[forme] entre des balises perso [/forme] comme dans cette phrase "
;  

echo 
'Texte original :<br />',$message,'<br />';  

//--- la regex ---// 
$message=preg_replace('`\[forme]([^[]+)\[/forme]`s',   
                            
'<font color="#FF0000"><b>$1</b></font>',   
                            
$message);  

echo 
'<br />Le résultat de cette regex :<br />'$message.'<br />'

?>



 4) Trouver des mots dans une chaine...  
les regex php d'expreg.com
posté par Yves Maistriaux (ID : 11)

Permet de trouver les termes dans une chaine / texte qui sont placés entre des balises persos et les récupérer dans un tableau. Balise perso utilisée ici le %
Fonction utilisée : preg_match_all


<?php
//--- texte ---// 
$texte  "Un petit test pour %trouver% dans un texte %des mots% ";  
$texte .= "qui sont %placés% comme ici %entre% une serie de %balises persos% ";  
$texte .= "pour ensuite %les récupérer% et les placer %dans un tableau% et voilà";  

//--- la regex ---// 
$texte preg_match_all"/%(.*)%/Us" $texte$mots);  

foreach(
$mots[1] as $val)   
{  
    echo 
"Trouvé : $val <br />";  
}  
 
//Ce qui affichera ==> 

//trouvé : trouver 
//trouvé : des mots 
//trouvé : placés 
//trouvé : entre 
//trouvé : balises persos 
//trouvé : les récupérer 
//trouvé : dans un tableau 

?>



 5) Tester une extension de fichier  
les regex php d'expreg.com
posté par Yves Maistriaux (ID : 13)

Petite regex permettant de vérifier un nom de fichier et son extension. utilise la fonction eregi.

//- Explication -//
- on vérifie si le nom du fichier ne contient rien d'autre que des lettres, des chiffres
exemple : image.gif
- une seule fois le tiret - ou l'underscore _ entre les lettres/chiffres
exemple : image-truc.gif ou image_truc.gif
- maintenant, le tiret et l'underscore peuvent se suivre
exemple : image-_truc.gif
- par contre ceci sera refusé : ima-ge_truc.gif


<?php
//--- test sur un fichier image 

$fichier="une_image.gif";  

if(
eregi("^[a-z0-9]+[-_]*[a-z0-9]*(\.(gif|jpe?g|png))$",$fichier))  
{  
echo 
"extension correcte";  
} else {  
echo 
"extension fausse";  


?>



 6) Mettre des mots en évidence  
les regex php d'expreg.com
posté par Yves Maistriaux (ID : 42)

Petite regex permettant de mettre des mots en évidence dans un texte sans tenir compte de la casse.
Dans notre exemple, le mot sera affiché avec un background en jaune.

<?php
$texte
='Les regex pour php c\'est sympa, mais on trouve aussi des regex pour mysql';
$mot='regex';
$motif='`(.*?)('.$mot.')(.*?)`si';
$sortie='$1<span style="background-color:#ffcc00">$2</span>$3';
echo 
preg_replace($motif,$sortie,$texte);
?>



 7) Mettre en évidence une série de chiffres dans un texte  
les regex php d'expreg.com
posté par Yves Maistriaux (ID : 51)

Petite regex permettant de mettre en évidence une série de chiffres dans un texte.
Dans le cas présent j'utilise simplement la balise < b > et < /b >.
L'idéal bien évident est d'user de balises de style genre .

<?php
$texte
='Une série de chiffres comme 895 et aussi 2, ainsi que 85 qui doivent être en gras!';
$motif='`(.*?)(\d+)(.*?)`';
$sortie='$1<b>$2</b>$3';
echo 
preg_replace($motif,$sortie,$texte);
?>



 8) Un simple test de mot de passe  
les regex php d'expreg.com
posté par Yves Maistriaux (ID : 52)

Une simple vérification avec preg_match sur un mot de passe.
On accepte chiffres et lettres, minimum de 4 caractères et maximum de 8.

<?php
$passe
='toto1234';
if(!
preg_match('`^([[:alnum:]]{4,8})$`',$passe))
{
echo 
"c'est pas bon";
}
else
{
echo 
"Test avec preg_match : c'est bon !";
}
?>



 9) Césure de mots trop long V1  
les regex php d'expreg.com
posté par Yves Maistriaux (ID : 65)

Fonction permettant de faire une césure sur des mots trop longs tapés dans des zonnes de texte comme un forum par exemple.

<?php
function coupe_mot($ch,$longueur=15,$inserer=' ')
{
return 
preg_replace('`([^\s]{'.$longueur.'})`','$1'.$inserer,$ch);
}
$test 'Unmotbientroplongécritparunenfoirédansunforum
suivi d\'un autre tout simple'
;
echo 
coupe_mot($test);
?>



 10) Césure de mots trop long V2  
les regex php d'expreg.com
posté par Yves Maistriaux (ID : 66)

Même source que la version 1 mais dans celle-çi on tient compte d'un balisage html éventuel, ceci, afin de ne pas appliquer la césure au milieu des balises html

<?php
function coupe_mot($ch,$longueur=15,$inserer=' ')
{
  return 
preg_replace('`([^\s<>]{'.$longueur.'})`','$1'.$inserer,$ch);
}
$test 'Unmotbientroplongécritparunenfoirédansunforum
suivi d\'un autre entre balise html
 <strong><u><i>unmotvraimenténormedanscetexte</i></u></strong>
 et un dernier mottrèslongbeaucouptroplongàcouper'
;

echo 
coupe_mot($test);
?>



 11) Césure sur répétition de lettres identiques V1  
les regex php d'expreg.com
posté par Yves Maistriaux (ID : 67)

Cette regex permet de réduire des mots tapés par l'internaute comportant une série de lettres identiques à la queue-leu-leu.
Exemple :
Saluuuuuuuuuuuuuuuuuuuuuuuuuuut !
Bonjouuuuuuuuuuuuuuuuuuuuuuur !
Ouuuuuuuuaaaaaaaaaaaaaaah !

La regex que je donne travaille au travers d'un test réalisé sur le texte afin de savoir s'il y a des mots trop longs
preg_match(); et preg_replace();

<?php
$chaine 
='Bonjourrrrrrrrrrrrrrrrrrrrr, il y a des mots trop
 long qui vont être coupés à l\'affichage.
<br />
Houlaaaaaaaaaaaa, mais ça marche'
;
  
if(
preg_match('`(.)(\1{3,})`',$chaine,$out))
{
echo 
'Il y a des mots trop longs, on coupe !<br />';
echo 
preg_replace('`(.)(\1{3,})`s','$1',$chaine);
}
else
{
echo 
'bon';
}

?>



 12) Mettre des mots en évidence Version 2  
les regex php d'expreg.com
posté par Yves Maistriaux (ID : 83)

Mettre une série de mots en évidence dans un texte.
Liste de mot au départ d'un array()

<?php
$ch
='Bon alors voilou, la bonne méthode consiste à limiter les
 mots de façon à éviter de prendre une partie, comme sol dans
 solide, bravo dans bravoure et bon dans bonne comme au début,
 même si BRAVO ou BON sont en majuscules ou encore un mix des
 deux et au pluriel comme BrAVoS.'
;

$mot=array('bravo','bon','sol');

$motif='`\b(('.implode('|',$mot).')s?)\b`si';

$sortie='<span style="background-color:#ffcc00">$1</span>';
echo 
preg_replace($motif,$sortie,$ch);
?>



 13) Mettre des mots en évidence Version 3  
les regex php d'expreg.com
posté par Yves Maistriaux (ID : 106)

Cet ensemble de regex (demandée par un internaute sur un forum) permet de mettre en forme (coloriser) des mots trouver dans un texte sans altérer le balisage HTML si d'aventure celui-ci contenait le terme recherché.

On passe la chaine sujet à preg_split() qui, en fonction du masque fourni, éclatera la chaine afin de retourner un tableau en sortie.
Il suffit ensuite de matcher les différents éléments du tableau et de leur appliquer les remplacements voulus.

On peut coloriser plusieurs mots en utilisant une liste avec | ou en faisant un implode avec le même séparateur sur des valeurs passsées en POST par exemple.

$mots_a_trouver='regex|php|mysql';

<?php
$ch
='Les regex php, c\'est sympa, mais on trouve des
<a href="regex.php" title="les regex en php">Regex</a> aussi avec mysql.
Un exemple, en image <img src="test.gif" alt="une regex en image" />.'
;

function 
marque_mot($ch,$mot)
{
$tab=preg_split('`(<\w+.*?>)`',$ch,-1,PREG_SPLIT_DELIM_CAPTURE);
foreach(
$tab as $key=>$val){
if(
preg_match('`^<\w+`',$val))
{
$tab[$key]=$val;
}
else
{
$tab[$key]=preg_replace('`\b'.$mot.'\b`i',
'<span style="background-color:#ffcc00">$0</span>',
$val);
}
}
return 
implode($tab);
}
$mot_a_trouver='regex';
echo 
marque_mot($ch,$mot_a_trouver);
?>



 14) Vérifier un nombre  
les regex php d'expreg.com
posté par Yves Maistriaux (ID : 107)

On vérifie une valeur fournie par l'internaute et passée via un formulaire.
Un pourcentage qui peut s'exprimer comme ceci
0.1 ou 0,1 à 100

On pourrait le faire avec un is_numeric, mais on accepte ici une virgule ou un point comme séparateur de décimal.

<?php
$ch
='2';

if(!
preg_match('`^(((100|[1-9]\d?)([,.][1-9]\d?)?)|0[,.][1-9]\d?)$`',$ch))
{
echo 
'pas OK';
}
else
{
echo 
'OK';
}

?>



 15) Césure sur des mots V3  
les regex php d'expreg.com
posté par Yves Maistriaux (ID : 110)

Et voiçi encore une autre version de césure sur des mots sans couper les attributs des balises HTML

<?php
$texte 
'Unmotbientroplongécritparunenfoirédansunforum suivi d\'un autre avec balise html
 <strong class="pouet" style="background-image;width:130px;"><u><b><i>énorme,
unmotvraimenténormedanscetexte</i></b></u></strong> et un mottrèslongbeaucouptroplong'
;

$min='25';
function 
coupe_mot($match,$longueur=15,$inserer='*')
{
  return 
wordwrap($match[1],$longueur,$inserer,1);
}
$texte1=preg_replace_callback('`\b([[:alnum:]]{'.$min.',})\b`','coupe_mot'$texte);

echo 
htmlentities($texte1);
?>



 16) Vérifier une clé RIB  
les regex php d'expreg.com
posté par Yves Maistriaux (ID : 128)

A la demande d'un internaute, j'ai été amené à créer une petite regex pour la vérification syntaxique d'une clé RIB
(un truc qu'on a pas en Belgique ça ^^)

<?php
$rib 
'69'
if (
preg_match('`^(0[1-9]|[1-8]\d|9[0-7])$`'$rib))
{
    echo 
$rib,' --->OK';
  }else{
    echo 
$rib,' --->pas OK';
  }
?>



 17) Mettre des mots en évidence Version 4  
les regex php d'expreg.com
posté par Jukien (ID : 108)

En me penchant sur une optimisation de la version 3, je propose une amélioration permettant de coloriser des mots entre les balises, genre strong que j'ai ajouté dans la phrase d'origine pour le test.

<?php
$ch
='Les regex php, c\'est sympa, mais on peut les mettre en
avant avec la balise <strong>strong</strong>.
Un exemple, en image <img src="test.gif" alt="une regex en image" />.'
;

function 
marque_mot($ch,$mot)
{
$tab=preg_split('`(</?[a-z]+[^>]*>)`i',$ch,-1,PREG_SPLIT_DELIM_CAPTURE);

foreach(
$tab as $key=>$val){
if(
strpos($val'<') === 0)
{
$tab[$key]=$val;
}
else
{
$tab[$key]=preg_replace('`\b'.$mot.'\b`i','<span style="background-color:#ffcc00">$0</span>',$val);
}
}
return 
implode($tab);
}
$mot_a_trouver='strong';
echo 
marque_mot($ch,$mot_a_trouver); 
?>



 18) Construction d'une liste à puce [style Wikipedia]  
les regex php d'expreg.com
posté par jobherzt (ID : 64)


Cette fonction permet de transformer un texte du type :
un certain texte
[*]element 1
[*]element 2
un autre texte

en

un certain texte

  • element 1
  • element 2

un autre texte

en utilisant les assertions complexes.


<?php
function makeListe($capt)
{
    return 
str_replace("[*]","<li>","<ul>".$capt[0]."</ul>");
}

$texte=preg_replace_callback("#\[\*\].*\n(?!\[\*\])#sU","makeListe",$texte);

?>



 19) Un soundex en français  
les regex php d'expreg.com
posté par Frédéric Bouchery (ID : 40)

Voici une adaptation en PHP de la fonction soundex2 francisée de Frédéric BROUARD (http://sqlpro.developpez.com/Soundex/).

C'est une bonne démonstration de la force des expressions régulières compatible Perl.

<?php
function soundex2$sIn )
{
   
// Si il n'y a pas de mot, on sort immédiatement
   
if ( $sIn === '' ) return '    ';
   
// On met tout en minuscule
   
$sIn strtoupper$sIn );
   
// On supprime les accents
   
$sIn strtr$sIn'ÂÄÀÇÈÉÊËŒÎÏÔÖÙÛÜ''AAASEEEEEIIOOUUU' );
   
// On supprime tout ce qui n'est pas une lettre
   
$sIn preg_replace'`[^A-Z]`'''$sIn );
   
// Si la chaîne ne fait qu'un seul caractère, on sort avec.
   
if ( strlen$sIn ) === ) return $sIn '   ';
   
// on remplace les consonnances primaires
   
$convIn = array( 'GUI''GUE''GA''GO''GU''CA''CO''CU',
'Q''CC''CK' );
   
$convOut = array( 'KI''KE''KA''KO''K''KA''KO''KU''K',
'K''K' );
   
$sIn str_replace$convIn$convOut$sIn );
   
// on remplace les voyelles sauf le Y et sauf la première par A
   
$sIn preg_replace'`(?<!^)[EIOU]`''A'$sIn );
   
// on remplace les préfixes puis on conserve la première lettre
   // et on fait les remplacements complémentaires
   
$convIn = array( '`^KN`''`^(PH|PF)`''`^MAC`''`^SCH`''`^ASA`',
'`(?<!^)KN`''`(?<!^)(PH|PF)`''`(?<!^)MAC`''`(?<!^)SCH`',
'`(?<!^)ASA`' );
   
$convOut = array( 'NN''FF''MCC''SSS''AZA''NN''FF''MCC',
'SSS''AZA' );
   
$sIn preg_replace$convIn$convOut$sIn );
   
// suppression des H sauf CH ou SH
   
$sIn preg_replace'`(?<![CS])H`'''$sIn );
   
// suppression des Y sauf précédés d'un A
   
$sIn preg_replace'`(?<!A)Y`'''$sIn );
   
// on supprime les terminaisons A, T, D, S
   
$sIn preg_replace'`[ATDS]$`'''$sIn );
   
// suppression de tous les A sauf en tête
   
$sIn preg_replace'`(?!^)A`'''$sIn );
   
// on supprime les lettres répétitives
   
$sIn preg_replace'`(.)\1`''$1'$sIn );
   
// on ne retient que 4 caractères ou on complète avec des blancs
   
return substr$sIn '    '04);
}
?>



 20) Compter le nombre de mots dans une chaine  
les regex php d'expreg.com
posté par Fabrice Lezoray (ID : 24)

Cette petite portion de code vous permettra de compter le nombre de mots dans une chaine.

Note :

- Si vous disposez de PHP 4.3 ou supérieur, il vaut mieux utiliser str_word_count();

- j' ai inséré plusieurs espaces consécutifs entre les mots pour justifier ici (si il y a lieu) l' utilisation d' une REGEX, car sinon un : echo count(explode(' ', $chaine)); suffirait, mais êtes vous êtes vous sur de la forme de votre chaine ?

<?php

$chaine 
'Un texte   contenant   5 mots';

echo 
count(preg_split('`\\W`'$chaine, -1PREG_SPLIT_NO_EMPTY));

?>



 21) Vérification d' un format MD5  
les regex php d'expreg.com
posté par Fabrice Lezoray (ID : 25)

Cette petite portion permet de vérifier la validité d' un format MD5.

- chaine de 32 caractères
- comportant uniquement des lettres minuscules comprises entre a et f [a-f] ou des chiffres [0-9]

<?php
$truc 
md5('truc');
// $truc = 'cool';

if(preg_match('`^[a-f0-9]{32}$`'$truc))
echo 
'Format valide MD5';
else 
echo 
'Invalide !!!!!!';

?> 




European Cards - Hosting-Ec Validation W3C European Cards - Hosting-Ec Validation W3C © 2003 - 2008 www.expreg.com - Toutes reproductions interdites sans l'autorisation écrite des auteurs
:::::::::: Design an Hosting by : European Cards Sprl ::::::::::