Das richtige Format ist schnell geprüft, da helfen ein paar kleinere reguläre Ausdrücke weiter.

1
2
3
4
5
6
7
8
9
$mail       = 'name@domain.tld';
$mailMuster = '/^[a-zA-Z0-9-_.]+@[a-zA-Z0-9-_.]+\.[a-zA-Z]{2,4}$/';
$muster     = preg_match($mailMuster, $Addr);

if ($muster == true) {
    echo 'gültiges Format';
} else {
    echo 'ungültiges Format';
}

Mit diesem kleinen Script, prüft man, ob eine E-Mailadresse im Format (vorname.)name@(sub.)domain.tld vorliegt.

Um nun zu prüfen, ob auch die TLD gültig ist, muss man schon etwas weiter in die Trickkiste greifen.

In der folgenden Funktion wird ebenfalls das Format geprüft.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
<?php
/**
 * E-Mailadresse prüfen
 *
 * @param str $Addr
 * @param int $Level
 * @return bool
 */

function MailCheck($Addr, $Level) {
    $mailMuster = '/^[a-zA-Z0-9-_.]+@[a-zA-Z0-9-_.]+\.[a-zA-Z]{2,4}$/';
    $muster     = preg_match($mailMuster, $Addr);

    /**
     * Prüfen ob die E-Mailadresse das richtige Format hat
     * name@domain.tld
     */

    if ($muster == true) {
        /**
         * z. Zt. gültige Top-Level Domains
         */

        $gTLDs  = 'com:net:org:edu:gov:mil:int:arpa:';
        $CCs    = 'ad:ae:af:ag:ai:al:am:an:ao:aq:ar:as:at:au:aw:az:ba:bb:bd:be:bf:' .
                  'bg:bh:bi:bj:bm:bn:bo:br:bs:bt:bv:bw:by:bz:ca:cc:cf:cd:cg:ch:ci:' .
                  'ck:cl:cm:cn:co:cr:cs:cu:cv:cx:cy:cz:de:dj:dk:dm:do:dz:ec:ee:eg:' .
                  'eh:er:es:et:fi:fj:fk:fm:fo:fr:fx:ga:gb:gd:ge:gf:gh:gi:gl:gm:gn:' .
                  'gp:gq:gr:gs:gt:gu:gw:gy:hk:hm:hn:hr:ht:hu:id:ie:il:in:io:iq:ir:' .
                  'is:it:jm:jo:jp:ke:kg:kh:ki:km:kn:kp:kr:kw:ky:kz:la:lb:lc:li:lk:' .
                  'lr:ls:lt:lu:lv:ly:ma:mc:md:mg:mh:mk:ml:mm:mn:mo:mp:mq:mr:ms:mt:' .
                  'mu:mv:mw:mx:my:mz:na:nc:ne:nf:ng:ni:nl:no:np:nr:nt:nu:nz:om:pa:' .
                  'pe:pf:pg:ph:pk:pl:pm:pn:pr:pt:pw:py:qa:re:ro:ru:rw:sa:sb:sc:sd:' .
                  'se:sg:sh:si:sj:sk:sl:sm:sn:so:sr:st:su:sv:sy:sz:tc:td:tf:tg:th:' .
                  'tj:tk:tm:tn:to:tp:tr:tt:tv:tw:tz:ua:ug:uk:um:us:uy:uz:va:vc:ve:' .
                  'vg:vi:vn:vu:wf:ws:ye:yt:yu:za:zm:zr:zw:';

        /**
         * country codes können folgende TLD`s vorangestellt sein
         */

        $cTLD   = 'com:net:org:edu:gov:mil:co:ne:or:ed:go:mi:';
        $fail   = 0;

        /**
         * wandelt in Kleinbuchstaben um
         */

        $Addr   = strtolower($Addr);

        /**
         * teilt die Adresse in user und domain Teile
         */

        $UD     = explode('@', $Addr);

        if (sizeof($UD) != 2 || !$UD['0']) {
            $fail = 1;
        }

        echo $ud['0'];
        echo $ud['1'];

        /**
         * teilt den domain Abschnitt
         */

        $Levels = explode('.', $UD['1']);
        $sLevels = sizeof($Levels);
        if ($sLevels < 2) {
            $fail = 1;
        }

        /**
         * holt die TLD und überprüft die Länge
         */

        $tld = $Levels[$sLevels-1];
        $tld = ereg_replace('[>)}]$|]$', '', $tld);

        if (strlen($tld) < 2 || strlen($tld) > 3 && $tld != 'arpa') {
            $fail = 1;
        }

        /**
         * überprüft TLD
         */

        if ($Level && !$fail) {
            $Level--;

            if (!ereg($tld.':', $gTLDs) && !ereg($tld.':', $CCs)) {
                $fail = 2;
            }
        }

        /**
         * überprüft country code
         */

        if ($Level && !$fail) {
            $cd = $sLevels - 2;
            $domain = $Levels[$cd] . '.' . $tld;

            if (ereg($Levels[$cd].':', $cTLDs)) {
                $cd--;
                $domain = $Levels[$cd] . '.' . $domain;
            }
        }

        return true;
    } else {
        echo 'Format der E-Mailadresse ungültig<br />' . "\n";
        //exit();
        return false;
    }
}
?>

Verwendung der Funktion:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
/**
 * Variablen die ich gerade brauche :-)
 */

$mail       = 'na.ich@hier.drueben.de';
$mailmuster = '/^[a-zA-Z0-9-_.]+@[a-zA-Z0-9-_.]+\.[a-zA-Z]{2,4}$/';
$muster     = preg_match($mailmuster, $mail);


/**
* Prüfen ob die E-Mailadresse gültig ist
*/

$mailCheck  = MailCheck($mail, 1);

if ($mailCheck == true) {
   echo 'E-Mailadresse gültig !!' . "\n";
} else {
    echo 'Keine gültige E-Mailadresse !!' . "\n";
}
?>

Viel Spaß damit :-)

Achtung:
Ich übernehme keine Garantie für die Vollständigkeit der TLD’s und/oder der CC’s in der Funktion. Auch übernehme ich keine Garantie für evtl. Schäden an anderen Scripten. Dieses Script wurde von mir getestet und ist funktionsfähig.

Artikel / Seite weiterempfehlen

Schreibe einen Kommentar

Ihre Email-Adresse wird nicht veröffentlicht. Pflichtfelder sind durch * markiert.

Sie können folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>