
PHP / MySQL : Rechercher un mot dans une base avec REGEXP
Posté par : Neg le : 2010-03-02 12:55:34
Pour effectuer une recherche dans le champ d'une table d'une base de données on peut utiliser la fonction LIKE avec les jokers %. Ainsi pour chercher si un champs contient "jour" on lance une requête du type :
SELECT mon_champ FROM ma_table WHERE mon_champ LIKE '%jour%'
Seulement, la requête va aussi nous retourné le résultat si le champ contient "bonjour" ou "abajour". Le mot "jour" n'étant pas forcément entouré d'espaces (si il est en début ou fin de champs, ou encore entre parenthèses ou guillemets) utiliser LIKE '% jour %' ne fonctionnera pas correctement non plus.
MySQL fournit dans ce cas la fonction
REGEXP qui permet des recherches complexes utilisant les expressions régulières. Pour trouver un mot isolé on doit alors utiliser une requête comme celle ci :
SELECT mon_champ FROM ma_table WHERE mon_champ REGEXP '[[:<:]]jour[[:>:]]'
Pour aller un peu plus loin, si on tape plusieurs mots dans le champ de recherche il convient de les séparer et de les chercher séparément pour que le résultat soit convenable. Voila le traitement php à faire pour ce travail :
//$chaine étant la chaine complète à rechercher, on commence par séparer et compter les différents mots de la chaine :
$chaine=explode(' ', $chaine);
$nb=count($chaine);
//on declare une variable vide, et si il y'a plusieurs mots, pour chacun on incrémente sa recherche à la variable :
$req_sup='';
if($nb>1)
{
for($i=1;$i<$nb;$i++)
{
$req_sup.=" AND mon_champ REGEXP '[[:<:]]".$chaine[$i]."[[:>:]]' "
}
}
//on ajoute $req_sup à notre requete avec le premier mot, il suffira ensuite d'exécuter la requête.
$req="SELECT mon_champ FROM ma_table WHERE mon_champ REGEXP '[[:<:]]".$chaine[0]."[[:>:]]' ".$req_sup.""
J'aime, 3 personnes aiment çaCommentaire(s)(0)

la rue brikabrak
Posté par : Neg le : 2010-02-05 12:00:38
Ca m'amuse :
American Apparel lance un
concours de culs
Ca m'énerve :
C'est la crise alors on a droit aux
pratiques anti concurrentielles. il faut augmenter l'age de la retraite pour rééquilibrer le bilan, mais
pas de limites
Pour toi public :
sortie de l'album
les temps modernes d'Alonzo
sortie de l'album
rêve général(e) d'Agnès Bihl
Dév' :
L'équipe de
Facebook réécrit le runtime PHP pour ses besoins
J'aime, 2 personnes aiment çaCommentaire(s)(0)

Verifier le format d'un e-mail en php
Posté par : Neg le : 2010-01-29 11:12:47
Lors de formulaire d'inscription sur un site, l'e-mail est demandé à l'internaute. Il s'agit ensuite de vérifier si la chaine entrée correspond bien au format d'un e-mail (chaine@chaine.ext).
Pour cela on utilisait jusqu'à présent les expressions régulières. Voici la fonction que j'utilisais :
//fonction vérifiant la validité d'un email
//attend la chaine a vérifier en parramètre
//renvoi une chaine vide si l'e-mail est valide
//sinon renvoi une indication sur l'erreur
function fct_verif_mail($mail)
{
$retour='';
$mail=trim($mail);
if($mail==="")
{
$retour="L'e-mail ne peut pas être vide ! ";
}
else
{
$atom = '[-a-z0-9!#$%&\'*+\\/=?^_`{|}~]';
$domain = '([a-z0-9]([-a-z0-9]*[a-z0-9]+)?)';
$regex = '/^' . $atom . '+' .
'(\.' . $atom . '+)*' .
'@' .
'(' . $domain . '{1,63}\.)+' .
$domain . '{2,63}$/i';
if (!preg_match($regex, $mail))
{
$retour="L'adresse e-mail doit être valide ! ";
}
}
return $retour;
}
Seulement cette utilisation n'est plus à l'ordre du jour, en effet depuis php 5.2 la fonction
filter_var() a fait son apparition.
Elle permet, entre autre, de vérifier le format d'un e-mail. La fonction à utiliser pour vos prochains développements serait donc :
function fct_verif_mail($mail)
{
$retour='';
$mail=trim($mail);
if($mail==="")
{
$retour="L'e-mail ne peut pas être vide ! ";
}
elseif(filter_var($mail, FILTER_VALIDATE_EMAIL) === FALSE)
{
$retour="L'adresse e-mail doit être valide ! ";
}
return $retour;
}
Source
Note à moi même : penser à faire cette modification pour mes futurs formulaires.
J'aime, 5 personnes aiment çaCommentaire(s)(0)