Général

Les PCRE

Les POSIX

Pratique

Linux

Spécial php

Les billets de fred

Enlever certains mots Posté par Yves Maistriaux

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

Enlever certains mots V2 Posté par Yves Maistriaux

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)

Mettre du texte en forme entre balises perso Posté par Yves Maistriaux

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

Trouver des mots dans une chaine... Posté par Yves Maistriaux

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

Tester une extension de fichier Posté par Yves Maistriaux

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


?>
Compter le nombre de mots dans une chaine Posté par Fabrice Lezoray

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, -1, PREG_SPLIT_NO_EMPTY));

?>
Vérification d' un format MD5 Posté par Fabrice Lezoray

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 !!!!!!';

?>
Remplacement dans une page html sans abimer les tags Posté par naholyr

mixed html_replace ( mixed pattern, mixed replacement, mixed subject [, string replace_func]) Remplace pattern par replacement dans la chaine subject. Par défaut cette fonction se comporte comme str_replace (valeur par défaut pour replace_func). Pour effectuer des remplacements à base d'expressions régulières, il suffit de définir des masques corrects, et de donner a replace_func le nom de la fonction à utiliser. Cette fonction prendra les 3 premiers arguments, dans cet ordre, ainsi des noms de fonctions valides seront str_replace, preg_replace, ereg_replace, etc...

Un soundex en français Posté par Frédéric Bouchery

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.

Mettre des mots en évidence Posté par Yves Maistriaux

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);
?>
Mettre en évidence une série de chiffres dans un texte Posté par Yves Maistriaux

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 .

Un simple test de mot de passe Posté par Yves Maistriaux

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 !";
}
?>
Construction d'une liste à puce [style Wikipedia] Posté par jobherzt

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

?>
Césure de mots trop long V1 Posté par Yves Maistriaux

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

Césure de mots trop long V2 Posté par Yves Maistriaux

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

Césure sur répétition de lettres identiques V1 Posté par Yves Maistriaux

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();

Afficher le début d'une chaîne Posté par Yves Maistriaux

Portion de script qui permet de couper un chaine de caractères trop longue (3 versions) - version simple qui ne tient compte que de la longueur souhaitée - deuxième version qui ajoute trois points "..." - troisième version qui coupe la chaine à la hauteur de l'espace entre les mots et ajoute trois points"..."

Affichage du pluriel Posté par Yves Maistriaux

Voici 4 possibilités d'affichage et de gestion du pluriel suite à une requête pour connaître le nombre d'enregistrements dans une table. Note : vous avez bien la possibilité d'utiliser le pluriel entre parenthèses et de faire : echo 'Il y a ',$nb,' enregistrement(s) dans la table

Mettre des mots en évidence Version 2 Posté par Yves Maistriaux

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

Compléter une chaine chiffrée jusqu'à une longueur définie Posté par Yves Maistriaux

Une petite fonction pour complèter une chaine chiffrée sur une longueur définie Exemple : 125 On obtient 0000000125 ;

Césure sur des mots V1 Posté par Yves Maistriaux

Une autre manière de faire un résumé de texte. On va pratiquer la césure sur le nombres de mots et pas le nombre de caractères comme dans l'autre version. Les paramètres : - la variable texte - la variable nombre de mots à afficher Il y a plus court (en une ligne dans la V2) mais le but ici est d'utiliser une fonction, le passage d'arguments et une boucle pour reconstituer la phrase.

Césure sur des mots V2 Posté par Yves Maistriaux

La même fonctionnalité que la V1, mais en une seul ligne avec array_slice() Je vous laisse aller dans la doc pour comprendre ses fonctionnalités.

Mettre des mots en évidence Version 3 Posté par Yves Maistriaux

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);
?>
Vérifier un nombre Posté par Yves Maistriaux

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';
}

?>
Mettre des mots en évidence Version 4 Posté par Jukien

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);
?>
Césure sur des mots V3 Posté par Yves Maistriaux

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

Remplacer les accentués d'une chaine Posté par Yves Maistriaux

Une simple fonction pour remplacer tous les caractères accentués d'un texte. Utilises la fonction strtr()

Vérifier si une chaine contient des chiffres sans regex Posté par Yves Maistriaux

Extrait de la doc : - Recherche une chaîne de caractères dans un ensemble de caractères. C'est simple, grâce à cette fonction strpbrk() on peut vérifier qu'un u qu'une série de caractères appartient à la chaîne testée. Sans regex donc ! Attention toutefois, PHP5 only

Vérifier une clé RIB Posté par Yves Maistriaux

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';
}
?>
ADAM Benjamin 2008 | Admin