Expression régulières PHP
Fermé
atout1
Messages postés
216
Date d'inscription
mardi 11 mai 2010
Statut
Membre
Dernière intervention
17 juin 2011
-
13 janv. 2011 à 15:14
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 13 janv. 2011 à 21:19
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 13 janv. 2011 à 21:19
A voir également:
- Expression régulières PHP
- Easy php - Télécharger - Divers Web & Internet
- Expression de recherche - Guide
- Error: expected expression ✓ - Forum C
- Expression encoder - Télécharger - Divers Utilitaires
- Quel fichier contient l’expression trouverpix ? - Forum Programmation
6 réponses
xamurai
Messages postés
223
Date d'inscription
mardi 11 janvier 2011
Statut
Membre
Dernière intervention
19 février 2013
15
Modifié par xamurai le 13/01/2011 à 16:05
Modifié par xamurai le 13/01/2011 à 16:05
le 1 signifie que c'est une reponse boolean:
corrige ton code comme ceci
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]);
Akronos
Messages postés
140
Date d'inscription
jeudi 6 janvier 2011
Statut
Membre
Dernière intervention
31 janvier 2011
32
Modifié par Akronos le 13/01/2011 à 16:38
Modifié par Akronos le 13/01/2011 à 16:38
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:
Plus d'infos sur les pattern:
https://www.commentcamarche.net/contents/803-php-expressions-regulieres
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
Laorra
Messages postés
195
Date d'inscription
dimanche 12 novembre 2006
Statut
Membre
Dernière intervention
18 juillet 2011
107
13 janv. 2011 à 16:30
13 janv. 2011 à 16:30
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
https://www.php.net/manual/fr/function.preg-match.php
Akronos
Messages postés
140
Date d'inscription
jeudi 6 janvier 2011
Statut
Membre
Dernière intervention
31 janvier 2011
32
13 janv. 2011 à 16:36
13 janv. 2011 à 16:36
Oui Laorra c'est moi qui me suis trompé.
Je corrige ça tout de suite ;)
Je corrige ça tout de suite ;)
Laorra
Messages postés
195
Date d'inscription
dimanche 12 novembre 2006
Statut
Membre
Dernière intervention
18 juillet 2011
107
13 janv. 2011 à 16:42
13 janv. 2011 à 16:42
Trop d'honneur :)
Laorra
Messages postés
195
Date d'inscription
dimanche 12 novembre 2006
Statut
Membre
Dernière intervention
18 juillet 2011
107
13 janv. 2011 à 15:36
13 janv. 2011 à 15:36
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!
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!
atout1
Messages postés
216
Date d'inscription
mardi 11 mai 2010
Statut
Membre
Dernière intervention
17 juin 2011
13 janv. 2011 à 15:47
13 janv. 2011 à 15:47
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
<?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
xamurai
Messages postés
223
Date d'inscription
mardi 11 janvier 2011
Statut
Membre
Dernière intervention
19 février 2013
15
13 janv. 2011 à 16:06
13 janv. 2011 à 16:06
ton code est erroné car il peut egalement fonctioner pour:
aaaaa@bbbbb
or tu as besoin de
aaaaa@bbbb.ccc
aaaaa@bbbbb
or tu as besoin de
aaaaa@bbbb.ccc
Akronos
Messages postés
140
Date d'inscription
jeudi 6 janvier 2011
Statut
Membre
Dernière intervention
31 janvier 2011
32
Modifié par Akronos le 13/01/2011 à 16:09
Modifié par Akronos le 13/01/2011 à 16:09
j'aurais même dit:
Tu as besoin de a.b1_c-2@de_3f-4.ghi5
Tu as besoin de a.b1_c-2@de_3f-4.ghi5
xamurai
Messages postés
223
Date d'inscription
mardi 11 janvier 2011
Statut
Membre
Dernière intervention
19 février 2013
15
13 janv. 2011 à 16:09
13 janv. 2011 à 16:09
oui son code ne prend pas en compte les domaines ou suffix
atout1
Messages postés
216
Date d'inscription
mardi 11 mai 2010
Statut
Membre
Dernière intervention
17 juin 2011
13 janv. 2011 à 17:11
13 janv. 2011 à 17:11
j'ai essayé plein des choses mais je n'arrive pas prendre en compte que à la fin c'est obligatoire qu'il y aura .blabla
quelqu'un a une idée ? Merci d'avance
quelqu'un a une idée ? Merci d'avance
Akronos
Messages postés
140
Date d'inscription
jeudi 6 janvier 2011
Statut
Membre
Dernière intervention
31 janvier 2011
32
13 janv. 2011 à 17:16
13 janv. 2011 à 17:16
As-tu essayé le code xamurai?
$isOK = preg_match("/\b[a-z0-9_\-\.]+[@][a-z0-9_\-\.]+\.[a-z]{2,}\b/i", $chaine, $reponse ); if($isOK === 1) print_r($reponse[0]);
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Akronos
Messages postés
140
Date d'inscription
jeudi 6 janvier 2011
Statut
Membre
Dernière intervention
31 janvier 2011
32
13 janv. 2011 à 15:49
13 janv. 2011 à 15:49
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
$chaine = "du texte exemple adresse@domaine.tld encore du texte exemple"
Et il veut:
$mail = adresse@domaine.tld // figurant dans $chaine
xamurai
Messages postés
223
Date d'inscription
mardi 11 janvier 2011
Statut
Membre
Dernière intervention
19 février 2013
15
Modifié par xamurai le 13/01/2011 à 16:01
Modifié par xamurai le 13/01/2011 à 16:01
avec ceci tu as tu code compact et lisible:
"/\b[a-z0-9_\-\.]+[@][a-z0-9_\-\.]+\.[a-z]{2,}\b/i"
Akronos
Messages postés
140
Date d'inscription
jeudi 6 janvier 2011
Statut
Membre
Dernière intervention
31 janvier 2011
32
13 janv. 2011 à 16:03
13 janv. 2011 à 16:03
+1
atout1
Messages postés
216
Date d'inscription
mardi 11 mai 2010
Statut
Membre
Dernière intervention
17 juin 2011
13 janv. 2011 à 16:22
13 janv. 2011 à 16:22
merci je veux essayer :)
13 janv. 2011 à 16:13
13 janv. 2011 à 16:21
Modifié par Akronos le 13/01/2011 à 16:30
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:
Cependant, s'il n'y en a qu'une, il sera plus efficace et approprié d'utiliser:
13 janv. 2011 à 16:32
13 janv. 2011 à 21:19
Le client n'a pas dit ce que contenait « bla bla », et en toute logique, puisqu'on en est à répondre à un client, il aurait fallu poser la question avant d'essayer de répondre ;)
Donc tu réponds peut-être à la demande, mais peut-être pas :)