it-swarm.com.de

So erhalten Sie eine E-Mail-Adresse aus einer langen Zeichenfolge

In PHP habe ich eine Zeichenfolge wie folgt:

$string = "[email protected] MIME-Version: bla bla bla";

Wie bekomme ich nur die E-Mail-Adresse? Gibt es eine einfache Möglichkeit, den Wert zu erhalten?

28
athan_mj94

Wenn Sie nicht sicher sind, welcher Teil der durch Leerzeichen getrennten Zeichenfolge die E-Mail-Adresse ist, können Sie die Zeichenfolge nach Leerzeichen aufteilen und verwenden

filter_var($email, FILTER_VALIDATE_EMAIL)

auf jedem Teilstring.

26
mandaleeka

Bauen Sie auf die Antwort von mandaleeka auf, brechen Sie die Zeichenfolge mit einem Leerzeichen ab und verwenden Sie filter_var, um die Bereinigung zu bereinigen, und überprüfen Sie, ob noch eine gültige E-Mail-Adresse vorhanden ist:

function extract_email_address ($string) {
    foreach(preg_split('/\s/', $string) as $token) {
        $email = filter_var(filter_var($token, FILTER_SANITIZE_EMAIL), FILTER_VALIDATE_EMAIL);
        if ($email !== false) {
            $emails[] = $email;
        }
    }
    return $emails;
}
42
Rob Locke

basiert auf Constantine Regex .. funktioniert auch mit IP-Adressdomäne.

$pattern="/(?:[A-Za-z0-9!#$%&'*+=?^_`{|}~-]+(?:\.[A-Za-z0-9!#$%&'*+=?^_`{|}~-]+)*|\"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*\")@(?:(?:[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?\.)+[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[A-Za-z0-9-]*[A-Za-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/";

//$pattern="/[A-Za-z0-9_-][email protected][A-Za-z0-9_-]+\.([A-Za-z0-9_-][A-Za-z0-9_]+)/";

$subject="Hello [email protected] francis [email protected] words [email protected] words 2 words123 [email protected]";


preg_match_all($pattern, $subject, $matches);
15
user1046762

Aktualisieren der Antworten von @Rob Locken:

function extract_email_address ($string) {
   $emails = array();
   $string = str_replace("\r\n",' ',$string);
   $string = str_replace("\n",' ',$string);

   foreach(preg_split('/ /', $string) as $token) {
        $email = filter_var($token, FILTER_VALIDATE_EMAIL);
        if ($email !== false) { 
            $emails[] = $email;
        }
    }
    return $emails;
}
5
orafaelreis

Dieses kleine PHP Skript hilft uns dabei, die E-Mail-Adresse aus einem langen Absatz oder Text zu extrahieren. Kopieren Sie einfach dieses Skript und speichern Sie es als PHP -Datei (extract.php):

$string="[email protected] MIME-Version: bla bla bla";

$pattern="/(?:[a-z0-9!#$%&'*+=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+=?^_`{|}~-]+)*|\"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/";

preg_match_all($pattern, $string, $matches);

foreach($matches[0] as $email){
    echo $email.", ";
}
?>

Das obige Skript führt zu diesem Ergebnis:

[email protected],
4
Mitul Nakum

E-Mail-Adressen sind mit regulären Ausdrücken wirklich schwierig zu filtern, da es so viele zulässige Zeichen gibt. Es kann gemacht werden, aber Sie müssen möglicherweise einige Einstellungen vornehmen, um genau das zu bekommen, was Sie brauchen.

Sie könnten mit so etwas beginnen:

$string = "[email protected] MIME-Version: bla bla bla";
$matches = array();
$pattern = '/[A-Za-z0-9_-][email protected][A-Za-z0-9_-]+\.([A-Za-z0-9_-][A-Za-z0-9_]+)/'
preg_match($pattern,$string,$matches);

Und dann sollte $ Matches Ihre E-Mail-Adresse enthalten.

3
Gabriel Hurley

Wenn sich die E-Mail-Adresse immer am Anfang der Zeichenfolge befindet, besteht die einfachste Möglichkeit darin, die Zeichenfolge für alle Instanzen des Leerzeichens zu teilen und dann den ersten Wert aus dem resultierenden Array zu nehmen.

Vergewissern Sie sich natürlich, dass es sich um eine E-Mail-Adresse handelt, bevor Sie sie verwenden.

Weitere Informationen finden Sie in der PHP 'Split'-Funktion.

2
ravuya

das hat für mich funktioniert

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

ermitteln Sie eine beliebige E-Mail-Adresse in einer Zeichenfolge

1
Constantin
$text = 'First Last <[email protected]>'
$emails = array_filter(filter_var_array(filter_var_array(preg_split('/\s/', $text), FILTER_SANITIZE_EMAIL), FILTER_VALIDATE_EMAIL));
1
Sureshkumar

Ich habe auch die Antwort von @Rob Locke geändert. Ich habe festgestellt, dass es für mich nicht funktionierte, weil ich zuerst durch Kommas und dann durch Leerzeichen trennen musste.

function extract_email_addresses($sString)
{
  $aRet = array();
  $aCsvs = explode(',', $sString);
  foreach($aCsvs as $sCsv)
  {
    $aWords = explode(' ', $sCsv);
    foreach($aWords as $sWord)
    {
        $sEmail = filter_var(filter_var($sWord, FILTER_SANITIZE_EMAIL), FILTER_VALIDATE_EMAIL);
        if($sEmail !== false)
            $aRet[] = $sEmail;
    }
  }
  return $aRet;  
}
0
Keith Ritter

Sehen Sie sich Regular-Ausdrücke in PHP an.

Mit regulären Ausdrücken können Sie jedes Textmuster in einer bestimmten Zeichenfolge identifizieren. Sie sind unglaublich nützlich. Auch wenn Sie sich beim Kopieren und Einfügen eines Code-Snippets vorerst aus einer anderen Antwort halten können, sollten Sie ein wenig mehr in Erwägung ziehen.

Es kann anfangs etwas komplex sein, aber es lohnt sich auf jeden Fall.

0
anderstornvig

Wenn es wirklich durch Leerzeichen getrennt ist:

php > $matches = array();
php > preg_match('/^[^ ]*/', $string, $matches);
php > print_r($matches[0]);
[email protected]
0

Ordnen Sie einen regulären Ausdruck wie - ([A-Za-z0-9-]+)@([A-Za-z0-9])\\.([a-z]{3}) oder ähnliches zu.

0
Erix