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.

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>