Emailadressen und Telefonnummern aus Text filtern

Sprint

Erfahrenes Mitglied
Hallo zusammen,

mein Chef hat mal wieder zugeschlagen und ich muß es ausbaden.

Emails sollen automatisch verarbeitet werden. Die meisten Anforderungen dazu bringe ich selbst hin, beim Ausfiltern von Kontaktdaten bin ich ratlos. Es sollen aus dem kompletten Emailtext alle vorhandenen Emailadressen und Telefonnummern ausgefiltert werden. So sollen z.B. bei einer solchen Mail:

bla bla bla

Willy Wuff
01234/5678910
willi.wuff@gmx.net

weitergeleitete Mail:
bla bla blub

Max Meier
0033/1 23 45 67 89
Email: meier@yahoo.fr


die beiden Emailadressen und die beiden Telefonnummern ungeachtet ihrer Schreibweise herausgefiltert und z.B. in einer Datenbank abgelegt werden.

Irgendwie habe ich da überhaupt keine Idee, wie ich sowas anfangen könnte. Oder geht das überhaupt? Für die Telefonnummern könnte man zur Not alles entfernen, was nicht Buchstabe oder Zahl ist und dann per Regex die Zahlenfolgen suchen, die mindestens 7 oder 8 Ziffern lang sind, aber eine tolle Lösung ist das auch nicht. Und für Emailadressen natürlich auch nicht geeignet.

Kennt da jemand einen fertigen Filter oder hat eine Idee, wie man das umsetzen kann?
 
Hi

eine wirklich saubere Lösung mit 100% richtigen und vollständigen Ergebnissen wirds da nicht geben.
Es gibt, gerade bei den Telefonnummern, zu viel denkbare (und verwendete) Schreibweisen.

Nach langen Zahlenfolgen suchen und dabei eine Reihen von Zeichen dazwischen ignorieren (Leerzeichen / - : \ usw.usw.) klingt schon gut. Evt. auch eine Liste von Ortsvorwahlen in Deutschland hernehmen und den Anfang abgleichen (unter Berücksichtigung von internationalen Nummern mit 00 vorne, da eben die Staaten usw.).

Bei Mailadressen sollte das @ kein schlechter Anhalspunkt sein.
Dann links und rechts bis zu nächsten ungültigen Zeichen (wie Leerzeichen) weitergehen.
 
Ich hatte gestern Abend auch nochmal weiter gesucht, aber leider nichts gefunden. Hatte echt gedacht, daß sowas öfter gebraucht würde.

Dein Tip mit dem @ hat mich auf eine Spur gebracht. Weiß zwar noch nicht genau, wie ich die umsetze, aber das schaffe ich auch noch.
 
Zum Beispiel mit einem Regulären Ausdruck.
Mal ein erster Wurf für ein Pattern: https://regex101.com/r/tY3zV2/4
(Achtung, bei der Testseite ist noch der Parameter g mit dabei. Der bewirkt jedoch nur, dass beim PHP-Code-Generieren der preg_match_all() anstelle von preg_match() verwednet wird)

Code:
/(\d[\d\/ _-]*\d).*?([\w\._-]+@[\w\._-]+)/s

http://regexp-evaluator.de/evaluator/40a61b6bc6d6c0de7757fe2a21010f8a/#ergebnis
PHP:
 <?PHP
  //
  // Text, der durchsucht werden soll
  //
  $subject = 'bla bla bla

Willy Wuff
01234/5678910
willi.wuff@gmx.net

weitergeleitete Mail:
bla bla blub

Max Meier
0033/1 23 45 67 89
Email: meier@yahoo.fr

die beiden Emailadressen und die beiden Telefonnummern ungeachtet ihrer Schreibweise herausgefiltert und z.B. in einer Datenbank abgelegt werden.';
  //
  // Der Reguläre Ausdruck
  //
  $pattern = '/(\d[\d\/ _-]*\d).*?([\w\._-]+@[\w\._-]+)/s';
  //
  // RegExp auswerten
  //
  $result = preg_match_all($pattern, $subject, $subpattern);
  //
  // Ergebnis ausgeben
  //
  echo '<p>Der verwendete Reguläre Ausdruck trifft auf den zu durchsuchenden Text '.
       (($result) ? $result.' mal ' : 'nicht ').'zu.</p>';
  //
  // Unterausdrücke ausgeben
  //
  echo '<pre>'.print_r($subpattern, TRUE).'</pre>';
?>
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück