Post_Textarea nach Mailadressen durchsuchen

slimox

Mitglied
Hallo zusammen,

Bin gerade daran unser E-Mail-Tool zu verbessern. Nun habe ich folgendes Problem:

Es gibt eine Textarea in welche belibig viele Mailadressen kopiert werden können. Leider sind die nicht immer gleich Formatiert.

Ich suche nun mit PHP nach Mailadressen. Die die meine Regel erfüllen werden gefunden:

z.B.
PHP:
$post_string = 'name1@dm.de; name2@dm.de name3@dm.de name4 @ dm.de; name5 (a) dm.de, name6 @dm.de';

preg_match_all("/[A-Z0-9._%-]+@[A-Z0-9-]+.[A-Z]{2,4}/i",
               $post_string,
               $mailadressen, 
               PREG_PATTERN_ORDER);

var_dump($mailadressen);

Code:
array(1) {
  [0]=>
  array(3) {
    [0]=>
    string(11) "name1@dm.de"
    [1]=>
    string(11) "name2@dm.de"
    [2]=>
    string(11) "name3@dm.de"
  }
}

Ich schaffe es nicht, dass es name1 - name6 findet! :( Wie muss das pattern aussehen, dass es das (a) auch findet?

Bin um alle Ideen dankbar!:D
 
Code:
/[[:alnum:]\.\-\_]+[ ]*(?:\@|\(a\)|\(at\))[ ]*[[:alnum:]\.\-\_]+\.[[:alpha:]]{2,4}/i
Gilt auch für
Code:
n-a.m_e (at) my.do-mai_n.info
 
Yaslaw du bist unglaublich! :D

Habe das ganze noch ausgebaut. [a] und [ at ] ist auch noch dabei. Die Mailadressen werden dann noch mit einem richtigen @ versehen ;)

PHP:
$newMailadressen = array();
            
$post_string = 'name1 (at) dm.de; name2 ( at ) dm.de name3[a]dm.de name4 (a) dm.de; name5 (a) dm.de, name6 @dm.de';

preg_match_all("/[[:alnum:]\.\-\_]+[ ]*(?:\@|\[a\]|\[ a \]|\[at\]|\[ at \]|\(a\)|\( a \)|\(at\)|\( at \))[ ]*[[:alnum:]\.\-\_]+\.[[:alpha:]]{2,4}/i",
               $post_string,
               $mailadressen, 
               PREG_PATTERN_ORDER);

foreach($mailadressen[0] as $value){
    $value = str_replace(' ', '', $value); 
    $value = str_replace('(a)', '@', $value); 
    $value = str_replace('(at)', '@', $value); 
    $value = str_replace('[a]', '@', $value); 
    $value = str_replace('[at]', '@', $value); 
    
    $newMailadressen[] = $value;
}
var_dump($newMailadressen);

Und alle Mailadressen sind dabei :D
Code:
array(6) {
  [0]=>
  string(11) "name1@dm.de"
  [1]=>
  string(11) "name2@dm.de"
  [2]=>
  string(11) "name3@dm.de"
  [3]=>
  string(11) "name4@dm.de"
  [4]=>
  string(11) "name5@dm.de"
  [5]=>
  string(11) "name6@dm.de"
}

Danke nochmals für die sehr schnelle AW!;)
 
Es währe einfacher zuerst mit einem preg_replace die Emails zu normalisieren und dann auszulesen
PHP:
  $subject = 'name1@dm.de; name2@dm.de name3@dm.de name4 @ dm.de; name5 (a) dm.de, name6 @dm.de, n-a.m_e (at) my.do-mai_n.info';
  $pattern = '/([[:alnum:]\.\-\_]+)[ ]*(?:\@|\(a\)|\(at\))[ ]*([[:alnum:]\.\-\_]+\.[[:alpha:]]{2,4})/i';
  $replace = '\1@\2';
  $result = preg_replace($pattern, $replace, $subject);
ergibt
Code:
name1@dm.de; name2@dm.de name3@dm.de name4@dm.de; name5@dm.de, name6@dm.de, n-a.m_e@my.do-mai_n.info

Anschliessend mit einem einfachen pattern in die versch. Mails zerlegen
Code:
/[[:alnum:]\.\-\_]+\@[[:alnum:]\.\-\_]+\.[[:alpha:]]{2,4}/i
 
Zurück