Avatar billede hav0k Nybegynder
16. juni 2011 - 10:56 Der er 2 kommentarer

Søger PHP script til at hapse e-mail adresser fra tekst

Jeg søger et simpelt php script, hvor jeg kan smide en kæmpe bunke input tekst, der bl.a. indeholder en masse e-mail adresser. Jeg skal så kunne sortere alle e-mail adresserne fra og samle dem i et array eller lignende (resten af teksten er lige meget) Nogle idéer?
Avatar billede Slettet bruger
16. juni 2011 - 11:28 #1
Det eneste du med sikkerhed ved om en mail-adresse er at den indeholder et @
- og at der ikke er nogen mellemrum (i den aktive del).

Så det må handle om at finde @'erne, derefter strække fangarme ud til højre og venstre indtil du møder et mellemrum (eller et linjeskift).
- de udtrukne tekststumper skal så vrides igennem en validering der checker at der ER tale om en mail-adresse..

Til det sidste findes der en funktion i PHP (filter_var) - Eksempel:

if (filter_var($muligEmail, FILTER_VALIDATE_EMAIL))
    echo "$muligEmail er en valid email : )";
Avatar billede Slettet bruger
16. juni 2011 - 16:15 #2
En lidt anden fremgangsmåde en @T0M's er at opdele den pågældne tekst til ord, ved at opdele teksten ved hvert mellemrum, hvorefter man looper tekstens ord igennem og tjekker dem med filter_var()-funktionen.

Lad mig prøve komme med et kode eksemple:
<?php
// 1. Funktionen
function get_emails($txt) {
  // klargøre array til emails
  $mail = array();

  // i tilfælde af email står sidst på en linje i en flere linjet tekst, laver vi alle linjeskift om til mellemrum
  $txt = str_replace("\r", "", $txt); // fjerner eventuelle 'carriage returns'
  $txt = str_replace("\n", " ", $txt);

  // opdeler tekst i ord
  $part = explode(" ", $txt);

  // looper ordene igennem
  foreach($part as $ord) {
    // tjekker om ordet er en mail med filter_var() funktionen
    if(filter_var($ord, FILTER_VALIDATE_EMAIL))
    {
      // ordet blev godkendt som en mail, så vi tilføjer den til vores email-array
      $mail[] = $ord;
    }
  }

  // returnerer email-array
  return $mail;
}

// 2. Brug af funktionen
$string = <<<EOL
Kaj kan kontaktes på email kaj@mydomain.dk
Bøje kan kontaktes på email boeje@mydomain.dk
EOL;

$mails = get_emails($string);
?>

*OBS*
Det skal lige nævnes at PHP's filtrer ikke er specielt glade for special tegn som æ, ø og å i unicode endnu - har dog ikke testet det med iso-encoding.

Håber ovenstående kan bruges :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester