Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
PHP-OOP Emailschutz
Beitrag: #1
vom - PHP-OOP Emailschutz
Hier mal ein kleines Snippet womit man die Email auf Leerheit ( mit Doppelt Gesicherten Leerzeichen entfernen ) , Tashmailer und Länge prüfen kann. Browserforge gehört mir nicht das ihr euch wundert weil da immer Browserforge steht. Und man sollte beim Aufrufen eventuell noch htmlspecialchars() anwenden, hab ich ja gemacht...

PHP-Code:
<?php

    
/**
    * @ Check Forms / Framework by Browserforge
    * @ All Rights Reserved
    * @ Copyright 2013 
    **/
    
class form
{

    
/**
    * @ Param [String] Input
    * @ Param [Int] Max-Length
    * @ Param [Int] Trashmail-Save 0 = Off and 1 = On
    * @ The Function Returns 0 = Error || 1 = No @ || 2 = Length to short || 3 = Trashmailhoster || 4 = Ready
    **/
    
    
function email($input$length$trash)
    {
    
        
// Delete all Spaces
        
        
$input str_replace("  """$input);
        
$input str_replace(" """$input);
        
        if(empty(
$input))
        {
            
$x 0;
        }
        else
        {
        
            if(
$input == str_replace("@","",$input)) 
            {
                
$x 1;
            }
            else
            {
            
            if(
strlen($input) < $length)
            {
                
$x 2;
            }
            else
            {
            
            if(
$trash == 1)
            {
                if(
$input == str_replace(".mailexpire.com","",$input) || $input == str_replace(".spamtrail.com","",$input) || $input == str_replace("@0815.ru","",$input)) 
                {
                    
$x 3;
                }
                else
                {
                    
$x 4;
                }
            }
            else
            {
                
$x 4;
            }
            
            }
            
            }
    
        }
        
    return 
$x;
        
    }

}

    
/**
    * @ $x -> email("input[String]", "length", "0 or 1 for Trashmail");
    **/
    
    
$x = new form;
    
$a $x -> email(htmlspecialchars("liebich@browserforge.com"), 101); // Min. length = 10 and Trashmailer is on.

    
if($a == 1)
    {
    echo 
"Leer";
    }
    
    if(
$a == 2)
    {
    echo 
"Kein @ vorhanden";
    }
    
    if(
$a == 3)
    {
    echo 
"Zu kurz";
    }
    
    if(
$a == 4)
    {
    echo 
"alles gut";
    }

?>
(Dieser Beitrag wurde zuletzt bearbeitet: 22.04.2013, 17:57 von Power. )
[Bild: title.png]

You love Music ? Check out BrowserSound and find your Music everyday.
Du liebst Musik ? Dann komme zu BrowserSound und finde deine Musik jeden Tag.

BrowserSound
Suchen
Zitieren

Beitrag: #2
vom - RE: PHP-OOP Emailschutz
Hallo Glurak123,

ich hätte da einige Anmerkungen und Fragen zu deinem Thread.

Ich finde schon den Titel des Threads sehr missverständlich gewählt "Emailschutz" verleitete mich zunächst zu der Annahme in dem Thread ginge es um einen PHP-basierten serverseitigen Spam-Schutz. Und nicht lediglich um das validieren einer Email-Adresse

Auch würde mich interessieren welchen Zweck du mit dem Thread verfolgst? Soll das eine Art Tutorial oder "HowTo" sein? Wenn ja dann fehlen mir da zusätzliche Angabe wie der Code arbeitet, sei es als Kommentare im Code oder in einer genauen Erläuterung danach.

Außerdem gibst du in deinem Code einen Copyright-Vermerk an. Das heißt das niemand deinen Code verwenden darf. Daher frag ich mich was es für einen Sinn macht ihn dann öffentlich zu posten? Entweder lässt du den Copyright-Vermerk weg damit jeder deinen Code benutzen und ändern kann oder du gewährst wenigstens ein Nutzungsrecht (mit Bedingungen unter denen man deinen Code wiederverwenden darf).

Auch zu deinem Code stellen sich mir inhaltliche Fragen.

Wieso verwendest du eine Klasse?
Es macht für mich keinen Sinn eine Klasse zu schreiben die keinerlei Eigenschaften hat und nur aus einer einzigen Methode besteht. Hier wäre eine prozedurale Funktion wesentlich performanter.
Nochdazu halte ich die Wahl deines Klassennamens für sehr irreführend, da die "Form"-Klasse in vielen Programmiersprachen/Frameworks die abstrakte Klasse zur Vorlage eines Windows-Dialogs ist.

Auch deine Verwendung von Rückgabewerten erscheint mir recht willkürlich. Normal hat sich als Standard eingebürgert das im Erfolgsfall 0 und im Fehlerfall ein von 0 verschiedener (meist negativer) Wert zurückgegeben wird.
Deine Politik das Wissen um die Interpretation dieses Rückgabewertes dem aufrufenden Code zu überlassen, halte ich aber für mehr als kompliziert und ist sicher nicht im Sinne der Modularisierung positiv zu sehen. Gerade wenn du schon eine Klasse verwendest gibt es hier doch wesentlich elegantere Möglichkeiten.

Auch die Validierung der Email-Adresse selbst scheint mir nur sehr rudimentär zu sein.
Die Prüfung auf Leerzeichen ist zwar sicher gut gemeint rein formal aber falsch da ein Mail-Adresse sodenn der Lokalteil in doppelte Anführungszeichen eingeschlossen ist durchaus Leerzeichen enthalten darf (da dies aber nicht von allen Mailservern unterstützt wird bieten die meisten Providern die Benutzung des Leerzeichens nicht an, weshalb diese Tatsache meist unberücksichtigt bleibt). Was du mit "Doppelt Gesicherten Leerzeichen" meinst ist mir hingegen völlig schleierhaft.

Und deine Form des Vergleichs ob die Email-Adresse gewisse Zeichen enthält ist zwar sehr kreativ, allerdings nur schwer zu lesen und unperformant, obgleich natürlich funktionstüchtig. Besser wäre hier aber sicher die Verwendung folgenden Codes:
PHP-Code:
if (strpos($input"@") === false)
    {
    
//$input enthält @ nicht
    
}
else
    {
    
//$input enthält mindestens ein @
    

Die Prüfung auf nur dem Vorhandensein eines @ ist wie ich finde aber bei weitem nicht ausreichend. Da gibt es weit mehr Anfordernisse an eine syntaktisch korrekte Email-Adresse. Denn die folgenden möglichen Eingaben würden deine Validierung bestehen obwohl sie offensichtlich falsch sind:
"Bla@" //hier fehlt jede Form von Domain-Teil
"@Bla.de" //Hier ist zwar eine Domain vorhanden dafür fehlt der Lokalteil
"Bla@Bla" //Hier fehlt die Top-Level-Domain
"Bla@Bla@Bla" // Es darf nur genau ein @ Zeichen in der Mailadresse vorhanden sein
"Blüb@Bla.de" //Umlaute und alle anderen ASCII Zeichen über 127 sind im Lokalteil nicht erlaubt
".Bla@Bla.de" //Der Lokalteil darf nicht mit einem Punkt beginnen"
"Bla@Blubber..Bla.de" //Jeder Domainteil muss mindestens 1 bis max. 63 Zeichen lang sein
"Bla@-Bla.de" //Auch das ist keine zulässige Mail-Adresse da die Domain nicht mit einem - beginnen oder enden darf
usw.

Zur Validierung der Mail-Adresse rate ich daher dringend zur Verwendung von regular Expressions in Kombination mit weiteren Prüfungen.
In diesem Zusammenhang ist die Benutzung von htmlspecialchars auch völlig falsch, da so nach der Konvertierung aus einer legalen Email-Adresse eine illegale oder zu lange werden kann.

Deine Prüfung auf eine übergebene Maximal oder Minimallänge (hier sind deine Kommentare wiedersprüchlich; im Beispiel ganz unten ist von einer "Min. length" die Rede im Kommentar der Klasse von einer "Max-Length"; der Code prüft auf eine Minimal Länge) halte ich überdies auch für unlogisch, da die Min-Länge einer Email-Adresse durch die Mindestlänge der Adressbestandteile vorgegeben bzw. die Max-Länge durch die Protokolle auf einen MaximalWert von 254 sog. Oktetten (im Normalfall Bytes) inkl. @ Zeichen beschränkt ist. (Nur als Hinweis in deinem Code muss im Fall der unterschreitung der Min-Länge x auf 3 gesetzt werden nicht auf 2)

Schlussendlich halte ich die Lösung zum ausfiltern der Trash-Provider, die du hier benutzt für sehr starr und nur schwer zu erweitern. Hier würde ich zu einer Datenbank-gestützten Lösung oder wenigstens zu einer Array-basierten raten. (Auch hier der Hinweis in deinem Code muss im If-Fall x auf 4 gesetzt werden und im else fall solltest du dir eine neue Ausprägung für x ausdenken denn es auf 3 zu setzten was ja für eine zu kurze Mail-Adresse sprechen würde halte ich für Irreführung)

Abschließend möchte ich hier noch eine von mir geschriebene Klasse zur Email-Adress-Validierung posten die gern von jedem zum nicht kommerziellen Gebrauch frei verwendet und erweitert werden kann. Ich übernehme keine gewähr das sie 100%ig alle falschen Mailadressen erkennt, aber ich denke das sie durchaus alltagstauglich ist.

PHP-Code:
<?php


class EMailAdressValitadion
    
{
    
//Eigenschaften der Klasse:

    //Liste der Trash-Mail-Anbieter
    
private $TrashProviderList = array("mailexpire.com""spamtrail.com""0815.ru""10minutemail.com""3d-painting.com",
                        
"antichef.net""BeefMilk.com""bio-muesli.info""bio-muesli.net""cust.in"
                       
"despammed.com""DingBone.com""discardmail.com""discardmail.de"
                       
"dontsendmespam.de""edv.to""emailias.com""ero-tube.org""film-blog.biz"
                       
"FudgeRub.com""geschent.biz""great-host.in""guerillamail.org""imails.info"
                       
"jetable.com""kulturbetrieb.info""kurzepost.de""LookUgly.com""mail4trash.com"
                       
"mailinator.com""mailnull.com""nervmich.net""nervtmich.net""nomail2me.com"
                       
"nurfuerspam.de""objectmail.com""owlpic.com""proxymail.eu""rcpt.at"
                       
"recode.me""s0ny.net""sandelf.de""SmellFear.com""sneakemail.com"
                       
"snkmail.com""sofort-mail.de""spam.la""spambog.com""spambog.de"
                       
"spambog.ru""spamex.com""spamgourmet.com""spammotel.com""squizzy.de"
                       
"super-auswahl.de""teewars.org""tempemail.net""trash-mail.at""trash-mail.com"
                       
"trash2009.com""trashmail.at""trashmail.de""trashmail.me""trashmail.net"
                       
"trashmail.ws""watch-harry-potter.com""watchfull.net""wegwerf-email.net"
                       
"wegwerfadresse.de""wegwerfmail.de""wegwerfmail.net""wegwerfmail.org"
                       
"willhackforfood.biz""yopmail.com"); 

    
//Liste aller Top-Level-Domains
    
private $TopLevelDomainList = array("AC""AD""AE""AF""AG""AI""AL""AM""AN""AO""AQ""AR""ARPA""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""CD""CF""CG""CH""CI"
                         
"CK""CL""CM""CN""CO""COM""CR""CU""CV""CX""CY""CZ""DE""DJ"
                         
"DK""DM""DO""DZ""EC""EDU""EE""EG""EH""ER""ES""ET""FI""FJ""FK"
                         
"FM""FO""FR""FX""GA""GB""GD""GE""GF""GG""GH""GI""GL""GM""GN"
                         
"GOV""GP""GQ""GR""GS""GT""GU""GW""GY""HK""HM""HN""HR""HT"
                         
"HU""ID""IE""IL""IM""IN""INT""IO""IQ""IR""IS""IT""JE""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""MIL""MK"
                         
"ML""MM""MN""MO""MP""MQ""MR""MS""MT""MU""MV""MW""MX""MY"
                         
"MZ""NA""NC""NE""NET""NF""NG""NI""NL""NO""NP""NR""NT""NU"
                         
"NZ""OM""ORG""PA""PE""PF""PG""PH""PK""PL""PM""PN""PR""PS""PT",
                         
"PW""PY""QA""RE""RO""RU""RW""SA""SB""SC""SD""SE""SG""SH"
                         
"SI""SJ""SK""SL""SM""SN""SO""SR""ST""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""ZW");

    
//In dieser Variable speichern wir Validierungsfehler um sie nachher bei bedarf ausgeben zu können
    
private $ErrorMessage ""


    
//Die Funktion CheckAdress erhält die Email-Adresse als ersten Parameter 
    //Den optionalen 2. Parameter der Standardmäßig true ist und angibt ob der Trash-Provider-Filter benutzt werden soll oder nicht.
    //Der 3. optionale Parameter legt fest ob auch Spezialzeichen wie Leerzeichen oder Spitzeklammern die nur escapet zulässig sind 
    //akzeptiert werden sollen oder nicht. Der Standard ist false was bedeutet das diese Zeichen nicht akzeptiert werden.
    
public function CheckAdress ($EMailAdress$UseTrashFilter true$AllowSpecialCharacters false)
        {
        
//Reset der Fehlertext-variable für den Fall das dies nicht der erste durchlauf für dieses Objekt ist
        
$this->ErrorMessage "";

        
//Die variable für den Rückgabewert initialisieren
        
$Ruckgabe true;

        
//Wenn der Lokalteil in doppelte Hochkommas gehült ist
        
$LokalTeilMaskiert false;

        
//Leerzeichen glätten
        
$EMailAdress Trim($EMailAdress);

        
//Länge der Email-Adresse prüfen
        
if (strlen($EMailAdress) > 254)
            {
            
$this->ErrorMessage .= "Die Email-Adresse ist zu lang, eine Email-Adresse darf maximal 254 Stellen lang sein.\n";
            
$Ruckgabe false;
            }

        
//Die Emailadresse am @-Zeichen in die Hauptbestandteile aufsplitten
        //Ist der Lokalteil in doppelte Hochkomma weil er zusätzliche Sonderzeichen wie Leerzeichen enthält?
        
if (substr($EMailAdress01) == "\"" && $AllowSpecialCharacters)
            {
            
$LokalTeilMaskiert true;

            
//Nach maskierten doppletem Hochkomma suchen ( \" ) und die Positionen merken, dann selbige durch "AA" ersetzten
            //Grund: maskierte dopplete Hochkomma können wenn sie vorhanden sind das zerteilen behindern.

            
$PregTrefferPos = array();
            
preg_match("/\\\\\"/"$EMailAdress$PregTrefferPosPREG_OFFSET_CAPTURE);
            
$EMailAdress preg_replace("/\\\\\"/""AA",  $EMailAdress);

            
//Die Mailadresse an der Stelle von "@ zertrennen und das Hochkomma anschließend an den Lokalteil wieder anhängen
            
$EMailAdressMainParts explode("\"@"$EMailAdress);
            
$EMailAdressMainParts[0] .= "\"";

            
//Nun prüfen wir ob alle zuvor entfernten maskierten doppelten Hochkommas auch wirklich im Lokalteil waren 
            //und nicht vielleicht im Domainteil wo sie nicht erlaubt wären
            
for ($i 0$i sizeof($PregTrefferPos); $i++)
                {
                if (
$PregTrefferPos[$i][1] >= strlen($EMailAdressMainParts[0]))
                    {
                    
$this->ErrorMessage .= "Die Email-Adresse enthält im Domainteil das nicht zulässige doppelte Hochkomma.\n";
                    
$Ruckgabe false;
                    
$i sizeof($PregTrefferPos);
                    }
                }
            }
        else
            {
            
$LokalTeilMaskiert false;

            
//Nach maskierten @-Zeichen suchen ( \@ ) und die Positionen merken, dann selbige durch "AA" ersetzten
            //Grund: maskierte @-Zeichen können wenn sie vorhanden sind das zerteilen behindern.

            
$PregTrefferPos = array();
            if (
$AllowSpecialCharacters)
                {
                
preg_match("/\\\\@/"$EMailAdress$PregTrefferPosPREG_OFFSET_CAPTURE);
                
$EMailAdress preg_replace("/\\\\@/""AA",  $EMailAdress);
                }

            
//Die Mailadresse an der Stelle von @ zertrennen
            
$EMailAdressMainParts explode("@"$EMailAdress);

            
//Nun prüfen wir ob alle zuvor entfernten maskierten @-Zeichen auch wirklich im Lokalteil waren 
            //und nicht vielleicht im Domainteil wo sie nicht erlaubt wären
            
for ($i 0$i sizeof($PregTrefferPos); $i++)
                {
                if (
$PregTrefferPos[$i][1] >= strlen($EMailAdressMainParts[0]))
                    {
                    
$this->ErrorMessage .= "Die Email-Adresse enthält im Domainteil das nicht zulässige @-Zeichen.\n";
                    
$Ruckgabe false;
                    
$i sizeof($PregTrefferPos);
                    }
                }
            }

        
//Wenn nicht genau 2 Bestandteile vorhanden sind (also kein oder mehr als 1 @-Zeichen vorkommt)
        
if (sizeof($EMailAdressMainParts) != 2)
            {
            
//Wenn kein oder zuviele @-Zeichen vorhanden sind dies als Meldung wegschreiben und dann Abarbeitung beenden
            
if (sizeof($EMailAdressMainParts) < 2)
                
$this->ErrorMessage .= "Die Email-Adresse enthält kein @-Zeichen.\n";
            else
                
$this->ErrorMessage .= "Die Email-Adresse enthält mehr als ein @-Zeichen.\n";

            
$Ruckgabe false;
            return 
$Ruckgabe;
            }

        
//zunächst überprüfen wir nun den LokalTeil (also den vorderen Teil der Email-Adresse)

        //Die Zeichenlänge des Lokalteils darf 64 Zeichen nicht übersteigen
        
if (strlen($EMailAdressMainParts[0]) > 64)
            {
            
$this->ErrorMessage .= "Der Lokalteil der Email-Adresse darf nicht mehr als 64 Stellen haben.\n";
            
$Ruckgabe false;
            }

        
//Wenn der Lokalteil von doppelten Hochkomma umschlossen ist?
        
if ($LokalTeilMaskiert)
            {
            
//Der Lokalteil darf neben den normal zulässigen Zeichen: A-Za-z0-9.!#$%&'*+-/=?^_`{|}~ auch die folgenden enthalten @ :,;<>()[] bestehen
            
if (preg_match("/^\"[a-zA-Z0-9\.\!\#\$\%\&\'\*\+\-\/=\?\^\_\`\{\|\}\~@:,; <>\(\)\[\]]+\"$/"$EMailAdressMainParts[0]) != 1)
                {
                
$this->ErrorMessage .= "Die Email-Adresse enthält im Lokalteil nicht legale Zeichen.\n";
                
$Ruckgabe false;
                }
            }
        else 
            {
            
//Lokalteil ist nicht in doppelte Hochkomma eingeschlossen

            
if ($AllowSpecialCharacters)
                {
                
//Mit \ escapde Sonderzeichen entfernen
                
$EMailAdressMainParts[0] = str_replace("\\ """$EMailAdressMainParts[0]);
                
$EMailAdressMainParts[0] = str_replace("\\;"""$EMailAdressMainParts[0]);
                
$EMailAdressMainParts[0] = str_replace("\\,"""$EMailAdressMainParts[0]);
                
$EMailAdressMainParts[0] = str_replace("\\:"""$EMailAdressMainParts[0]);
                
$EMailAdressMainParts[0] = str_replace("\\<"""$EMailAdressMainParts[0]);
                
$EMailAdressMainParts[0] = str_replace("\\>"""$EMailAdressMainParts[0]);
                
$EMailAdressMainParts[0] = str_replace("\\("""$EMailAdressMainParts[0]);
                
$EMailAdressMainParts[0] = str_replace("\\)"""$EMailAdressMainParts[0]);
                
$EMailAdressMainParts[0] = str_replace("\\["""$EMailAdressMainParts[0]);
                
$EMailAdressMainParts[0] = str_replace("\\]"""$EMailAdressMainParts[0]);
                }

            
//Der Lokalteil darf nur aus A-Za-z0-9.!#$%&'*+-/=?^_`{|}~ bestehen
            
if (preg_match("/^[a-zA-Z0-9\.\!\#\$\%\&\'\*\+\-\/=\?\^\_\`\{\|\}\~]+$/"
                
$EMailAdressMainParts[0]) != 1)
                {
                
$this->ErrorMessage .= "Die Email-Adresse enthält im Lokalteil nicht legale Zeichen.\n";
                
$Ruckgabe false;
                }
            }

        if (
substr($EMailAdressMainParts[0], 01) == "." || 
            
substr($EMailAdressMainParts[0], -1)   == ".")
            {
            
$this->ErrorMessage .= "Der Lokalteil der Email-Adresse darf nicht mit einem Punkt beginnen oder enden.\n";
            
$Ruckgabe false;
            }


        
//Nun überprüfen wir nun den DomainTeil (also den hinteren Teil der Email-Adresse)

        //Zunächst zerlegen wir diesen Teil in die (möglicherweise vorhandenen) 
        //Subdomains, Domain und Top-Level-Domain (allgemein auch als Labels bezeichnet).
        
$EMailAdressDomainParts explode("."$EMailAdressMainParts[1]);

        
//Es muss mindestens eine Domain und Top-Level-Domain (also 2 Elemente im Array) geben
        
if (sizeof($EMailAdressDomainParts) < 2)
            {
            
$this->ErrorMessage .= "Der Domainteil der Email-Adresse muss mindestens aus einer Domain und " .
                        
"Top-Level-Domain mit Punkt getrennt bestehen.\n";
            
$Ruckgabe false;
            }

        
//Nun wird jedes Label des DomainTeil auf Ungültige Zeichen geprüft.
        
for ($i 0$i sizeof($EMailAdressDomainParts); $i++)
            {
            if (
preg_match("/^[a-zA-Z0-9\-]+$/"$EMailAdressDomainParts[$i]) != 1)
                {
                
$this->ErrorMessage .= "Der Domainteil der Email-Adresse enthält das Label '" 
                            
htmlspecialchars($EMailAdressDomainParts[$i]) . 
                            
"' dieses enthält ungültige Zeichen.\n";
                
$Ruckgabe false;
                }

            if (
substr($EMailAdressDomainParts[$i], 01) == "-" || 
                
substr($EMailAdressDomainParts[$i], -1)   == "-")
                {
                
$this->ErrorMessage .= "Der Domainteil der Email-Adresse enthält das Label '" 
                            
htmlspecialchars($EMailAdressDomainParts[$i]) . 
                            
"' dieses darf nicht mit einem - beginnen oder enden.\n";
                
$Ruckgabe false;
                }

            if (
strlen($EMailAdressDomainParts[$i]) > 63)
                {
                
$this->ErrorMessage .= "Der Domainteil der Email-Adresse enthält das Label '" 
                            
htmlspecialchars($EMailAdressDomainParts[$i]) . 
                            
"' dieses darf nicht mehr als 63 Stellen haben.\n";
                
$Ruckgabe false;
                }
            }

        
//Abschließend prüfen wir noch ob die Top-Level-Domain existiert
        
if (!in_array(strtoupper($EMailAdressDomainParts[(sizeof($EMailAdressDomainParts) - 1)]), $this->TopLevelDomainList))
            {
            
$this->ErrorMessage .= "Die Top-Level-Domain dieser Email-Adresse '" 
                        
htmlspecialchars($EMailAdressDomainParts[(sizeof($EMailAdressDomainParts) - 1)]) . 
                        
"' ist nicht legal.\n";
            
$Ruckgabe false;
            }

        
//Wenn der Trashmailfilter benutzt werden soll ...
        
if ($UseTrashFilter)
            {
            
//... dann die letzten beiden Glieder des Domain-Arrays prüfen.
            
if (in_array(strtolower($EMailAdressDomainParts[(sizeof($EMailAdressDomainParts) - 2)] . "." .
                
$EMailAdressDomainParts[(sizeof($EMailAdressDomainParts) - 1)]), $this->TrashProviderList))
                {
                
$this->ErrorMessage .= "Trash-Mail-Adressen dürfen nicht verwendet werden.\n";
                
$Ruckgabe false;
                }
            }

        return 
$Ruckgabe;
        }

    
//Die Funktion gibt den Fehlertext zurück, der Optionale Parameter $ForHtmlOutput ersetzt 
    //bei true das \n durch den <br>-Tag.
    
public function GiveErrorText ($ForHtmlOutput true)
        {
        if (
$ForHtmlOutput)
            return 
nl2br($this->ErrorMessage);
        else
            return 
$this->ErrorMessage;
        }

    }


$MeinMailAdressChecker = new EMailAdressValitadion();

if (
$MeinMailAdressChecker->CheckAdress("Max.Mustermann@Test.de"))
    echo 
"<span style='color:green'>Email-Adresse hat die Prüfung bestanden</span>";
else
    echo 
"<span style='color:red'>" $MeinMailAdressChecker->GiveErrorText() . "</span>";

//Für einen ausführlichen Test:
$TestMailAdressen = array(array("Mit Leerzeichen@Fehler.de"truefalse),
              array(
"MitZwei@Zeichen@Fehler.de"truefalse),
              array(
"OhneTopLevelDomain@Fehler"truefalse),
              array(
"MitLeerSubLevelDomain@Sub..Fehler.de"truefalse),
              array(
"GanzOhneAtZeichenFehler.de"truefalse),
              array(
"@Fehler.de"truefalse),
              array(
".AmAnfang@Fehler.de"truefalse),
              array(
"AmEndemit.@Fehler.de"truefalse),
              array(
"DomainMit-AmAnfang@-Fehler.de"truefalse),
              array(
"DomainMit-AmEnde@Fehler-.de"truefalse),
              array(
"Test@DomainDieVielZuLangeIst-WeilSieVielMehrZeichenAls63HatNaemlich64.de"truefalse),
              array(
"LokalTeilderVielZuLangeIstWeilErVielMehrZeichenAls64HatNaemlich65@Fehler.de"truefalse),
              array(
"EineTopLevelDomainDieEsNichtGibt@Fehler.xxx"truefalse),
              array(
"UmlauteinderDomain@Föhler.de"truefalse),
              array(
"VerboteneZeicheninderDomain@F_e&h(l#e%r.de"truefalse),
              array(
"\"Mit legalem Leerzeichen\"@Gut.de"truetrue),
              array(
"MitEscapten\\@zeichen@Gut.de"truetrue),
              array(
"MitEscapten\\@zeichenDasNichtErlaubtIst@Fehler.de"truefalse),
              array(
"\"Mit @zeichen und \\\"\"@Gut.de"truetrue),
              array(
"\"Mit @zeichen und \\\"\"@Fehler.de"truefalse),
              array(
"MitEscapten\\;Strichpunkt@Gut.de"truetrue),
              array(
"MitEscapten\\;StrichpunktDasNichtErlaubtIst@Fehler.de"truefalse),
              array(
"\"Mit, 'legalen', Sonderzeichen:<usw>\"@Gut.de"truetrue),
              array(
"\"Mit, _nichterlaubten_, 'legalen' Sonderzeichen:<usw>\"@Fehler.de"truefalse),
              array(
"Mit\\ 'legalescapten'\\ Sonderzeichen\\:\\<usw\\>@Gut.de"truetrue),
              array(
"Mit\\ _nichterlaubten_\\ 'legalescapten'\\ Sonderzeichen\\:\\<usw\\>@Fehler.de"truefalse),
              array(
"Viele*Sonderzeichen_Die-Alle#legal$sind?Ja!&das=toll@gut.de"truefalse),
              array(
"Noch'mehr`Sonderzeichen^die{legal}+toll%sind~oder/nicht|ja@gut.de"truefalse),
              array(
"TrashmailBeiAktiviertenFilter@Trash-Mail.com"truefalse),
              array(
"TrashmailBeiDeaktiviertenFilter@Trash-Mail.com"falsefalse));

$TestZeiten = array();
$GesamtZeit 0;

for (
$i 0$i sizeof($TestMailAdressen); $i++)
    {
    
$Start explode(" ",microtime());
    
$Start $Start[1] + $Start[0];

    echo 
"<br><br>Prüfe Email-Adresse: <b>" htmlspecialchars($TestMailAdressen[$i][0]) . "</b><br>Ergebniss:<br>";

    if (
$MeinMailAdressChecker->CheckAdress($TestMailAdressen[$i][0], $TestMailAdressen[$i][1], $TestMailAdressen[$i][2]))
        echo 
"<span style='color:green'>Email-Adresse hat die Prüfung bestanden</span><br>";
    else
        echo 
"<span style='color:red'>" $MeinMailAdressChecker->GiveErrorText() . "</span>";    

    
$Ende explode(" ",microtime());
    
$Ende $Ende[1] + $Ende[0];
    echo 
"<small>Verarbeitungszeit in Sekunden: " number_format(($Ende $Start), 7","".") . "</small><br>";
    
$TestZeiten[] = number_format(($Ende $Start), 7","".");
    
$GesamtZeit += ($Ende $Start);
    }

sort($TestZeiten);

echo 
"<br><br>Laufzeitergebnis:<br>
    <table border='0' width='33%'>
        <tr><td>Durchläufe:</td><td>" 
sizeof($TestMailAdressen) . "</td></tr>
        <tr><td>Gesamtlaufzeit:</td><td>" 
$GesamtZeit " Sekunden</td></tr>
        <tr><td>Durchschnittslaufzeit:</td><td>" 

             
number_format(round($GesamtZeit sizeof($TestMailAdressen), 7), 7","".") . 
             
" Sekunden</td></tr>
        <tr><td>Kürzeste Laufzeit:</td><td>" 
$TestZeiten[0] . " Sekunden</td></tr>
        <tr><td>Längste Laufzeit:</td><td>" 
$TestZeiten[sizeof($TestZeiten)-1] . " Sekunden</td></tr>
    </table>"
;

?>

Ich weis die Laufzeitrechnung ist nicht sonderlich aussagekräftig und vergleicht auch eher Äpfel mit Birnen aber ich hab sie mal drin gelassen.

Falls sich jemand den Output ansehen möchte kann er das auch hier tun: MailAdressValidierungsScript
(Dieser Beitrag wurde zuletzt bearbeitet: 22.04.2013, 17:56 von Power. )
[Bild: GildenBanner.png]
Homepage Suchen
Zitieren



Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste