Expression régulières PHP
atout1
Messages postés
236
Statut
Membre
-
Reivax962 Messages postés 3742 Statut Membre -
Reivax962 Messages postés 3742 Statut Membre -
Bonjour, tout le monde
j'ai une chaine de caractère :
$chaine = "bla bla bla mail@hotmail.fr bla totot toto ";
j'ai appliquer l'expression suivnat :
echo $mail = preg_match("#[a-zA-z0-9]+[-_.]?[a-zA-Z0-9.-_]+[@][a-zA-z0-9]+[-_.]?[a-zA-Z0-9]+[-_.]+[a-zA-Z0-9]+#", "$chaine" )
le echo me donne 1 , quelqu'un sait commen t faire pour récupere la valeur de mail (mail@hotmail.com)?? Merci d'avance
j'ai une chaine de caractère :
$chaine = "bla bla bla mail@hotmail.fr bla totot toto ";
j'ai appliquer l'expression suivnat :
echo $mail = preg_match("#[a-zA-z0-9]+[-_.]?[a-zA-Z0-9.-_]+[@][a-zA-z0-9]+[-_.]?[a-zA-Z0-9]+[-_.]+[a-zA-Z0-9]+#", "$chaine" )
le echo me donne 1 , quelqu'un sait commen t faire pour récupere la valeur de mail (mail@hotmail.com)?? Merci d'avance
6 réponses
-
le 1 signifie que c'est une reponse boolean:
corrige ton code comme ceci
$isOK = preg_match("/\b[a-z0-9_\-\.]+[@][a-z0-9_\-\.]+\.[a-z]{2,}\b/i", $chaine, $reponse ); if($isOK > 0) print_r($reponse[0]);-
-
-
Oui c'est vrai, mais je me base sur le cas étudié et n'utilise pas des données non précisées. (C'est comme ça qu'on t'apprends à réfléchir).
C'est bête, mais si un client te demande un design bleu, pourquoi rajouté la possibilité de choisir un design vert?
Le but est de répondre à la demande.
En gros, faut répondre à une question par la ou les réponses, et pas prévoir d'autre cas. Mais c'est vrai que dans le cas ou il y a plusieurs adresses mails, il faut utiliser:if($isOK > 0)
Cependant, s'il n'y en a qu'une, il sera plus efficace et approprié d'utiliser:if($isOK === 1)
-
-
-
-
preg_match renvoie un entier (corrigé "par" Laorra).
En fait avec un preg_match tu vérifie une correspondance entre un pattern et une chaine de caractère.
S'il renvoie un c'est qu'il y a une correspondance du pattern dans la chaîne de caractères (c'est surtout utiliser dans les if).
Si tu veux remplacer tu peux utiliser preg_replace.
Il suffit de trouver le bon pattern.
Si tu veux récupérer l'email utilise preg_replace ou ereg.
Tu devrais avoir quelque chose comme:
$pattern = '/^[:alnum:]+[@][:alnum:]+$/'; $mail = ereg($pattern,$chaine);
Plus d'infos sur les pattern:
https://www.commentcamarche.net/contents/803-php-expressions-regulieres-
Non, je confirme, preg_match renvoi bien un INT (nombre de fois que le chaîne est trouvée)
https://www.php.net/manual/fr/function.preg-match.php -
-
-
-
Salut,
Ici la valeur de mail n'est pas "mail@hotmail.com" mais bien 1,, puisque la fonction preg_match cherche si ta chaine passer en second paramêtre, correspond à l'expression régulière en paramêtre 1. Le 1 signifie que oui, cette expression correspond bien.
Le retour de la fonction preg_match est un INT, donc il t'affiche un INT.
Si tu veux afficher l'adresse email, c'est un :
echo $chaine;
que tu dois faire! -
Problème résolu , voilà le code final :
<?php
$chaine = "bla bla bla mail@hotmail.fr bla totot toto ";
preg_match('#[a-zA-z0-9]*[-_.+/\]?[a-zA-Z0-9.-_]+[@][a-zA-z0-9]*[-_.+/\]?[a-zA-Z0-9.-_]+#', $chaine, $matches, PREG_OFFSET_CAPTURE);
$result = array_merge($matches, $matches[0]);
echo $result[1]; // affiche : mail@hotmail.fr
?>
Merci pour vous tous -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Il veut isoler l'adresse mail du reste de la chaine si j'ai bien compris pour être général, il a:
$chaine = "du texte exemple adresse@domaine.tld encore du texte exemple"
Et il veut:
$mail = adresse@domaine.tld // figurant dans $chaine -
avec ceci tu as tu code compact et lisible:
"/\b[a-z0-9_\-\.]+[@][a-z0-9_\-\.]+\.[a-z]{2,}\b/i"