Expression régulières PHP

atout1 Messages postés 236 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

6 réponses

  1. xamurai Messages postés 223 Date d'inscription   Statut Membre Dernière intervention   15
     
    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]);     
     
    0
    1. Akronos Messages postés 163 Statut Membre 32
       
      if($isOK === 1)
      0
    2. Reivax962 Messages postés 3742 Statut Membre 1 011
       
      Akronos : Pas forcément ! Car tu exclus d'office les cas où il y a plusieurs adresses de courriel dans la chaîne...
      0
    3. Akronos Messages postés 163 Statut Membre 32
       
      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)
      0
    4. xamurai Messages postés 223 Date d'inscription   Statut Membre Dernière intervention   15
       
      oui c vrai :)
      0
    5. Reivax962 Messages postés 3742 Statut Membre 1 011
       
      En l'occurrence, le client n'a dit ni bleu ni vert.
      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 :)
      0
  2. Akronos Messages postés 163 Statut Membre 32
     
    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
    0
    1. Akronos Messages postés 163 Statut Membre 32
       
      Oui Laorra c'est moi qui me suis trompé.
      Je corrige ça tout de suite ;)
      0
    2. Laorra Messages postés 159 Date d'inscription   Statut Membre Dernière intervention   108
       
      Trop d'honneur :)
      0
  3. Laorra Messages postés 159 Date d'inscription   Statut Membre Dernière intervention   108
     
    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!
    0
  4. atout1 Messages postés 236 Statut Membre
     
    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
    0
    1. xamurai Messages postés 223 Date d'inscription   Statut Membre Dernière intervention   15
       
      ton code est erroné car il peut egalement fonctioner pour:

      aaaaa@bbbbb

      or tu as besoin de

      aaaaa@bbbb.ccc
      0
    2. Akronos Messages postés 163 Statut Membre 32
       
      j'aurais même dit:

      Tu as besoin de a.b1_c-2@de_3f-4.ghi5
      0
    3. xamurai Messages postés 223 Date d'inscription   Statut Membre Dernière intervention   15
       
      oui son code ne prend pas en compte les domaines ou suffix
      0
    4. atout1 Messages postés 236 Statut Membre
       
      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
      0
    5. Akronos Messages postés 163 Statut Membre 32
       
      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]);
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Akronos Messages postés 163 Statut Membre 32
     
    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
    0
  7. xamurai Messages postés 223 Date d'inscription   Statut Membre Dernière intervention   15
     
    avec ceci tu as tu code compact et lisible:
    "/\b[a-z0-9_\-\.]+[@][a-z0-9_\-\.]+\.[a-z]{2,}\b/i"
    0
    1. Akronos Messages postés 163 Statut Membre 32
       
      +1
      0
    2. atout1 Messages postés 236 Statut Membre
       
      merci je veux essayer :)
      0