Accueil
Trucs & Astuces
Scripts
Regex
Annuaire
Articles
.
|
Astuces PHP Expressions régulières
Variable au format numéro téléphone | [29-05-2002] |
Posté par Christian Remy
Fonction servant à transformer le résultat d'une variable $tel au format d'un numéro de téléphone à 10 chiffres
<?php
function NumTel($tel) { $ch = 10; // Numéro à 10 chiffres $tel = eregi_replace('[^0-9]',"",$tel); // supression sauf chiffres $tel = trim($tel); // suppression espaces avant et après if (strlen($tel) > $ch) { $d = strlen($tel) - $ch; // retrouve la position pour ne garder // que les $ch derniers } else { $d = 0; } $tel = substr($tel,$d,$ch); // récupération des $ch derniers chiffres $regex = '([0-9]{1,2})([0-9]{1,2})([0-9]{1,2})([0-9]{1,2})([0-9]{1,2})$'; $newtel = eregi_replace($regex, '\\1-\\2-\\3-\\4-\\5',$tel); // mise en forme return $newtel; /* Exemple : 03-81-51-45-78 */ }
// Appel de la fonction:
echo "Téléphone : ".NumTel($teldom);
?> |
|
|
[1 commentaire]
|
Valider une url | [14-04-2002] |
Posté par Doud
Pour vérifier la cohérence d'une url, on peut vérifier qu'il y a bien le http:// au début puis au moins un caractère, puis un '.' puis de nouveau au moins un caractère et enfin un '.fr' ou '.com' ou '.net' ou bien '.org'.
<? function testUrl($Url) { $r="^http://([_a-zA-Z0-9])+(\.[_a-zA-Z0-9])+(\.fr)|(\.com)|(\.org)|(\.net)"; if (eregi($r, $Url)) return (1); //valide else return (0); //non valide }
?> |
|
|
Templates | [02-03-2002] |
Posté par Sam Thery
Petite astuce pour remplacer tous les [VARIABLE] par la valeur de $VARIABLE. Permet au graphiste de créer / reprendre ses pages HTML sans toucher au code PHP, et inversement ;-)
Par exemple : [TITRE] sera remplacé par la valeur de $TITRE.
<?php function template($chaine) { $chaine = ereg_replace("\[([^]]+)\]","\$GLOBALS[\\1]",$chaine); eval("\$chaine = \"".addslashes($chaine)."\";"); return stripslashes($chaine); } ?> |
|
|
Affichage suivant le client | [04-03-2001] |
Posté par Frank JAMOIS
Voilà une 'regex' qui permet d'afficher un contenu suivant le navigateur :
<? if (ereg('MSIE', $HTTP_USER_AGENT) && !ereg('Opera', $HTTP_USER_AGENT)) // Internet Explorer echo "le client est Internet Exploreur"; elseif (ereg('Opera', $HTTP_USER_AGENT)) // Opera echo "le client est Opera"; elseif (ereg('Mozilla/4.', $HTTP_USER_AGENT)) // Netscape 4.x echo "le client est Netscape 4.x"; elseif (ereg('Mozilla/5.0', $HTTP_USER_AGENT) && !ereg('Konqueror', $HTTP_USER_AGENT)) // NS 6 echo "le client est Netscape 6.x"; else // others echo "le client est non reconu"; ?> |
|
|
[2 commentaires]
|
Indentation | [13-02-2001] |
Posté par Frédéric Bouchery
Voici une astuce pour garder l'indentation d'un texte lors d'une "sortie" HTML :
On utilise les expressions régulières compatibles Perl avec une assertions avant. Vous pouvez ajouter aussi :
pour transformer les retours chariot en "<BR>".
L'avantage de cette astuce, c'est qu'une phrase peut revenir à la ligne automatiquement. C'est mieux que d'utiliser les balises "<PRE>" ou de remplacer tous les espaces par des espaces insécable ( ).
|
Conversion "tolérante" en date mySQL | [11-01-2001] |
Posté par Frédéric Bouchery
Voici une manière de contrôler les dates saisies par vos utilisateurs avec une expression régulière trés "tolérante". Les champs de la date peuvent être séparés par des "/", des ="-", des "." ou des espaces. On accepte des espaces suplémentaires entre chaque chiffre et l'année peut être sur 1, 2 ou 4 chiffres. Si la date n'est pas sur 4 chiffres, on part du principe que l'on fait référence à l'année 2000. Il y a également un contrôle de cohérence (pas de 30 février par exemple).
Si la fonction ne renvoie rien (false), on retrouve l'erreur dans la variable $erreur.
<? function mySQLDate($date,&$erreur) { $ereg = '^[ ]*([0-9]{1,2})[ ]*[ /.-][ ]*([0-9]{1,2})[ ]'; $ereg .= '*[ /.-][ ]*([0-9]{1,2}|[0-9]{4})[ ]*$';
if (ereg($ereg, $date, $tab)) { if(strlen($tab[3])< 4) $tab[3] = sprintf('20%02d',$tab[3]); $mkt = mktime(0,0,0,$tab[2],$tab[1],$tab[3]); $result = date('Y-m-d',$mkt); $saisie = sprintf ('%04d-%02d-%02d',$tab[3],$tab[2],$tab[1]); if ($result != $saisie) $erreur = "Vérifiez la date. C'est peut être le ".date('d/m/Y',$mkt); else return $result; } else { $erreur = 'Format de date invalide'; } ?> |
|
|
Extraire le dernier élément d'un nom de domaine | [03-12-2000] |
Voici une expression régulière qui permet de récupérer d'un hostname ou d'un nom de domaine le dernier élément qui correspond au pays (quand il ne s'agit pas d'un .com, un .net, un .org ...).
<? $chaine = "www.phpinfo.net"; echo ereg_replace("^(.*).(.*)$", "\\2", $chaine); ?> |
|
|
Censurer certains mots dans un texte | [29-11-2000] |
Voici un extrait du code de Phorum qui permet de bannir d'un texte certains mots (durs à l'oreille), en les remplaçant par la séquence de votre choix.
<? $blurb = "@!#$";
$message = "Mais où est passée la clé de la maison.\n"; $message .= "Je ne la perds jamais !!\n"; $message .= "Mais elle est là !\n";
$bannir = "mais";
if (strstr(strtoupper($message), strtoupper($bannir))) { if (strtoupper($message) == strtoupper($bannir)) $message=$blurb; $message = eregi_replace("^$bannir([^a-zA-Z])", "$blurb\\1", $message); $message = eregi_replace("([^a-zA-Z])$bannir$", "\\1$blurb", $message); while(eregi("([^a-zA-Z])($bannir)([^a-zA-Z])", $message)){ $message = eregi_replace("([^a-zA-Z])($bannir)([^a-zA-Z])", "\\1$blurb\\3", $message); } }
echo $message; ?> |
|
Deuxième méthode (merci Fred) :
<? $bannir = "mais|clé";
echo preg_replace("/(^|[^a-zA-Z])($bannir)([^a-zA-Z]|$)/si", '\\1'.$blurb.'\\3',$message); ?> |
|
|
Ne garder que le corps d'un fichier HTML | [29-11-2000] |
Posté par Frédéric Bouchery
Cette expression régulière extrait le texte compris entre les balises <HTML>...<BODY> et </BODY></HTML>.
<? $body = eregi_replace('(^.*<html[^>]*>.*<body[^>]*>)|(</body[^>]*>.*</html[^>]*>.*$)', '', $texte); ?> |
|
|
Rendre des urls d'un texte cliquables | [20-08-2000] |
Pour rendre cliquables les URLs contenues dans un texte, utilisez l'expression régulière suivante :
<? $texte = eregi_replace( "([[:alnum:]]+)://([^[:space:]]*)([[:alnum:]#?/&=])", "<A HREF=\"\\1://\\2\\3\" TARGET=\"_blank\">\\1://\\2\\3</a>", $texte); ?> |
|
|
[1 commentaire]
|
Retour-Charriot et TEXTAREA | [20-08-2000] |
L'élément HTML TEXTAREA permet dans un formulare de saisir du texte sur plusieurs lignes. La plupart des navigateurs code le saut de ligne par \r\n. Mais certains préfèrent \n, d'autres \r !
Voici une expression régulière qui mettra tout le monde d'accord :
<? $textarea_texte = ereg_replace("(\r\n)|(\n)|(\r)", "\n", $textarea_texte); ?> |
|
|
Vérifier qu'une variable contient un entier | [20-08-2000] |
Utilisez l'expression régulière suivante pour vérifier qu'une variable contient une valeur entière :
<? if ( ereg("^[0-9]+$", $variable) ) { echo "C'est un entier"; } ?> |
|
|
[2 commentaires]
|
Anti-spam | [24-05-2000] |
Voici une fonction qui permet de transformer une adresse email dans une page web en son équivalent en codes ASCII :
<? function no_spam($email) { $cars = array( "A","B","C","D","E","F","G","H","I","J", "K","L","M","N","O","P","Q","R","S","T", "U","V","W","X","Y","Z", "a","b","c","d", "e","f","g","h","i","j","k","l","m","n", "o","p","q","r","s","t","u","v","w","x","y", "z", "@");
$htmls = array( "65","66","67","68","69","70","71","72","73","74", "75","76","77","78","79","80","81","82","83","84", "85","86","87","88","89","90", "97","98","99","100","101","102","103","104","105", "106","107","108","109","110","111","112","113","114", "115","116","117","118","119","120","121","122","64");
for ($i = 0; $i < $nbcars = count($cars); $i++) $email = ereg_replace($cars[$i], "&#$htmls[$i];", $email);
print $email; } ?> |
|
|
[2 commentaires]
|
Nettoyer une chaîne | [21-05-2000] |
Pour supprimer dans une chaîne les caractères non-alphanumériques (c.à.d. différents de a-z, A-Z, 0-9), nous pouvons utiliser les expressions régulières :
<? $chaine = "56è[(qsADFqs f]f GD sd fd-sdf45-*85qs"; echo eregi_replace("[^a-z0-9]", "", $chaine)."<BR>"; ?> |
|
L'exemple suivant permet de conserver aussi les espaces :
|
Vérifier la validité (syntaxique) d'une adresse email | [19-05-2000] |
Une petite fonction qui vérifie la validité syntaxique d'une adresse email en utilisant les expressions régulières :
<? function EmailOK($email) { return( ereg('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'. '@'. '[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.'. '[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$', $email) ); }
$email = "nom.prenom@herbergeur.fr"; echo "$email:".EmailOK($email)."<BR>\n";
$email = "nom.prenom@herbergeur"; echo "$email:".EmailOK($email)."<BR>\n";
$email = "nom.prenom_herbergeur.fr"; echo "$email:".EmailOK($email)."<BR>\n"; ?> |
|
|
|
|