Ansicht:   

#365401 Fehler in Regular Expression zur E-Mail-Adress-Validierung (web.coding)

verfaßt von effeff, Ostfriesland, 13.05.2014, 16:35:34

> > ich habe einen regulären Ausdruck gebastelt, um eine in ein
> Kontaktformular
> > im Internet eingegebene E-Mail-Adresse auf Validität zu überprüfen. Das
> > Pattern sieht folgendermaßen aus:
> >
>

^[a-zA-Z0-9._-]+@[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?(.[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?)*.[a-zA-Z0-9]{2-6}$


> >
> > Gedanken dahinter:
> >

(Buchstabe, Zahle, Punkt, Unterstrich, Bindestrich)+@(Buchstabe,
> > Zahl)((Buchstabe, Zahl, Bindestrich)*(Buchstabe, Zahl))?(.(Buchstabe,
> > Zahl)((Buchstabe, Zahl, Bindestrich)*(Buchstabe,
> > Zahl))?)+(Buchstabe){2-4}


>
> > Der lokale Teil der Adresse muss aus mindenstens einem alphanumerischen,
> > einem Punkt oder Bindestrich bestehen (wie mir gerade auffällt, gibt's
> da
> > natürlich einige Unzulänglichkeiten - so wäre eine Adresse á la
> > ".@mail.com" auch möglich). Nach dem @-Zeichen muss dann das erste
> Zeichen
> > Buchstabe oder Zahl sein, mögliche weitere Zeichen dürfen auch
> Bindestriche
> > sein, der letzte Buchstabe muss aber in jedem Fall wieder Buchstabe oder
> > Zahl sein. Subdomains kann, muss es aber nicht geben. Die
> Toplevel-Domain
> > kann aus zwei bis fünf Zeichen bestehen (gibt's da mit den ganzen
> > Städte-TLDs überhaupt noch eine Grenze nach oben?).
>
> Du hast jetzt 3 Varianten für die Länge der TLD (im Regex 2-6, in den
> Gedanken 2-4, in der Beschreibung 2-5).
>
> Was versprichst Du Dir von der Validierung?
>
> Wenn Du sicherstellen willst, daß die E-Mail-Adresse dazu geeignet ist, dem
> User eine E-Mail zu schicken, hilft es nicht, wenn Du sicherstellst, daß
> eine formal richtige Adresse vorliegt (blabla@example.org hält jeder
> formalen Prüfung stand, eine Mail dorthin wird aber den User nicht
> erreichen).
> Das schaffst Du nur, wenn Du dem User auf die angegebene Adresse eine Mail
> schickst mit einem Code, den der User auf Deiner Seite wieder eingeben muß.
> Nur wenn der User den korrekten Code wieder eingibt (den er NUR per E-Mail
> erhalten darf), weißt Du, daß die Adresse zu diesem Zeitpunkt geeignet ist.
>
>
> Dein Ausdruck läßt ungültige E-Mail-Adressen durch, lehnt dafür aber
> gültige Adressen ab.
>
> Der Hostname (also der Teil nach dem @) darf aus theoretisch unendlich
> vielen Ebenen bestehen, aber dabei gilt:
> 1 bis 64 Zeichen pro Ebene, 256 Zeichen maximal, 2 Ebenen minimal.
>
> Dein Ausdruck erlaubt für die TLD nur 6 Zeichen, es gibt viele deutlich
> längere TLDs, siehe Datenbank der
> TLDs, hier werden also gültige Adressen abgelehnt.
> Dein Ausdruck erlaubt aber auch für jede Ebene (außer der TLD) beliebig
> viele Zeichen.
>
> Im Local Part (dem Teil vor dem @) erlaubst Du nur einen Teil der erlaubten
> Zeichen, viele fehlen, z.B. das +
> Der . darf weder als erstes noch als letztes Zeichen auftauchen.
>
>
> Sinnvoller als der Regex-Kram ist m.E. dieses Vorgehen:
>
> prüfen, ob genau ein @ vorkommt.
> Hostname abspalten, und auf Existenz der Domain prüfen (DNS-Abfrage).
> Falls existent, auch noch prüfen, ob es für die Domain Mailserver gibt
> (MX-Records, auch aus der DNS-Abfrage)
> Und wenn's wirklich wichtig ist, Mail mit speziellem Code an die Adresse
> schicken, und den Code auf Deiner Seite wieder abfragen.
>
> Daß Du IDN (internationalized domain names, also Domainnamen mit Umlauten
> oder kyrillischen, arabischen, chinesischen, ... Zeichen) mit Deinem Regex
> nicht zuläßt, ist Dir hoffentlich auch bewußt. Diese müßten bei Deiner
> Prüfung als Punycode, also als xn--... eingegeben werden.

In der Regel nutzt man den alten "HELO RAUBKATZE"-Trick...  ;-)

--
Gruß,

ff

Möge TUX mit dir sein!

 

gesamter Thread:

Ansicht:   
Auf unserer Web-Seite werden Cookies eingesetzt, um diverse Funktionalitäten zu gewährleisten. Hier erfährst du alles zum Datenschutz