Das leidige Thema der E-Mail-Prüfung
Matze
- meinung
1 Vinzenz Mai0 Matze
0 Mega0 EKKi0 Matze0 Ingo Turski
Hallo und guten Abend!
Ich arbeite gerade an einem Script für eine einfache E-Mail-Prüfung.
Es wurde ja bereits oft diskutiert wie weit eine Prüfung sinnvoll ist und ich habe mich für die minimalste Prüfung entschieden. Zur endgültigen Prüfung wird anschließend eine E-mail mit der Bitte um Bestätigung an die Adresse gesendet.
Der erste Ansatz ist natürlich auf das Vorhandensein von \r\n zu prüfen.
Muss ich dann genauso auf \n\r, nur \r und nur \n prüfen?
Ist es sinnvoll E-mailadressen wie "localhost" "mail@uniserver" zu berücksichtigen?
Ich dachte daran, dass wenigstens ein @ und ein . vorkommen sollten.
Die Prüfung wäre also, ob vor dem @, zwischen @ und . und nach dem letzten . mindestens 2 Zeichen stehen. Also mindestens "ab@cd.ef". Wobei dadurch auch "aa.bb@cc.dd.ee" u.ä. berücksichtigt werden.
Nicht vorkommen dürfen \r\n, \n\r, \n, \r.
Das wäre dann meine komplette Prüfung.
Haltet ihr das soweit für ausreichend?
Habe ich etwas vergessen?
Danke für eure Meinung!
Grüße, Matze
Hallo,
Ich dachte daran, dass wenigstens ein @ und ein . vorkommen sollten.
Habe ich etwas vergessen?
... Dir das Selfforumssieb anzuschauen :-)
Freundliche Grüße
Vinzenz
Hallo Vinzenz!
Habe ich etwas vergessen?
... Dir das Selfforumssieb anzuschauen :-)
Oh, danke! Dann erübrigt sich natürlich eine weitere Diskussion darüber :)
Ich muss allerdings sagen, dass ich die Navigation bei SelfHTML etwas schwer finde. Ich hab zum Beispiel auch eine ganze Weile gebraucht, um diesen Artikel wieder zu finden.
In dem von dir verlinkten Artikel wird allerdings nichts von \r und \n erwähnt. Oder kann ich das als selbstverständlich betrachten, solche Eingaben abzufangen? Das könnte man ja dort noch zusätzlich erwähnen.
Grüße, Matze
Ich dachte daran, dass wenigstens ein @ und ein . vorkommen sollten.
Also wenn ich das richtig im Kopf hab, wäre eine Mailadresse
example@de
theoretisch möglich, da eine TLD ja auch eine Maildomain sein kann. Ob das bei einer Prüfung relevant ist, weiss ich nicht, wollte es nur erwähnt haben.
Zusätzlich müssen natürlich auch mehrere Punkte in der DOmain erlaubt sein, da eine Subdomain natürlich auch eine Maildomain sein kann.
Mahlzeit Matze,
Die Prüfung wäre also, ob vor dem @, zwischen @ und . und nach dem letzten . mindestens 2 Zeichen stehen.
Warum muss der "Name" mindestens 2 Zeichen haben?
MfG,
EKKi
Hallo EKKI!
Die Prüfung wäre also, ob vor dem @, zwischen @ und . und nach dem letzten . mindestens 2 Zeichen stehen.
Warum muss der "Name" mindestens 2 Zeichen haben?
Muss er nicht, genauso wenig wie die TLD nicht aus 2 Zeichen bestehen oder überhaupt existieren muss. Genauso wenig wie ein @ oder ein Punkt vorkommen muss. Ich hab es allerdings berücksichtigt und die Prüfung nach dem Namen auch auf 1 Zeichen beschränkt.
Meine RegExp:
'/^(\S+?)(.*?)@(\S+?)(.*?)\.(\S+?)(.*?)(\S+?)$/'
Klartext:
Ales erstes Zeichen ist jedes Zeichen ausser Whitespace beliebig oft erlaubt.
Dahinter ist jedes beliebige Zeichen ausser Newline beliebig oft oder gar nicht erlaubt.
Danach wird ein @ gewünscht.
Nach dem @ ist wieder jedes Zeichen ausser Whitespace beliebig oft erlaubt.
Danach ist wieder jedes Zeichen ausser Newline beliebig oft oder gar nicht erlaubt.
Es muss ein Punkt auftauchen.
Anschließend ist wieder jedes Zeichen ausser Whitespace, gefolgt von beliebig vielen oder keinem beliebigen Zeichen ausser Newline und einem oder mehreren abschließenden beliebigen Zeichen ausser Whitespace erlaubt.
Danach wird das Ende der Zeile erwartet.
Richtig gemerkt, die TLD muss aus mindestens 2 Zeichen bestehen wobei das erste und das letzte Zeichen kein Whitepace darstellen dürfen.
Jetzt überleg ich grad, ob ich da noch die Abfrage nach \n und \r rein krieg oder eine extra RegExp schreiben muss.
Grüße, Matze
Hi,
Meine RegExp:
'/^(\S+?)(.?)@(\S+?)(.?).(\S+?)(.*?)(\S+?)$/'
die solltest Du besser nochmal hinterfragen...
> Dahinter ist jedes beliebige Zeichen ausser Newline beliebig oft oder gar nicht erlaubt.
Warum willst Du Whitespace zulassen?
> Danach wird ein @ gewünscht.
es könnten auch aus Versehen mehrere eingegeben sein...
> Danach ist wieder jedes Zeichen ausser Newline beliebig oft oder gar nicht erlaubt.
s.o.
> Anschließend ist wieder jedes Zeichen ausser Whitespace, gefolgt von beliebig vielen oder keinem beliebigen Zeichen ausser Newline und einem oder mehreren abschließenden beliebigen Zeichen ausser Whitespace erlaubt.
hier lässt Du dann sinnvoller Weise keine Whitespaces mehr zu...
> Richtig gemerkt, die TLD muss aus mindestens 2 Zeichen bestehen wobei das erste und das letzte Zeichen kein Whitepace darstellen dürfen.
kennst Du TDLs mit Whitespaces?
[Ich prüfe E-Mails so](http://1ngo.de/web/email-check.html).
`'^([^\s@,:"<>]+)@([^\s@,:"<>]+\.[^\s@,:"<>.\d]{2,}|(\d{1,3}\.){3}\d{1,3})$'`{:.language-php}
ist ebenfalls nur rudimentär und nur darauf ausgerichtet:
- mögliche Vertipper oder fehlende Eingaben zu erkennen und
- Manipulationen bei Nutzung der mail()-Funktion zu verhindern.
Ich habe bewußt gequoteten Freitext nicht zugelassen, da ja i.d.R. nur die reine Mailadresse abgefragt wird. Und die Prüfung auf IPs habe ich auch stark vereinfacht, weil mir die Erkennung grober Eingabefehler schon ausreicht.
Worauf ich nicht sofort kam, war die Möglichkeit der Negierung, über die bestimmte kritische Zeichen nicht zugelassen werden, anstatt - wie üblich - die zugelassenen Zeichen anzugeben; also Blacklist anstatt Whitelist, die im Zuge der Internationalisierung ja kaum noch bei vertretbarem Aufwand zu nutzen ist.
freundliche Grüße
Ingo
--
[[barrierefreie Ingo Webdesign](http://www.1ngo.de/web/) » [Suchmaschinenoptimierung](http://www.1ngo.de/web/seo.html) | [em?](http://www.1ngo.de/web/em.html) | [IE7 - Bugs](http://www.1ngo.de/web/ie7.html)]
Hallo Ingo!
Meine RegExp:
die solltest Du besser nochmal hinterfragen...
Ja, bin da leider auch nicht so fit.
Warum willst Du Whitespace zulassen?
Ich dachte mir "wer weiß was nach Punycode noch alles kommt" ;)
Danach wird ein @ gewünscht.
es könnten auch aus Versehen mehrere eingegeben sein...
Ja, das ist mir auch aufgefallen.
Ich prüfe E-Mails so.
'^([^\s@,:"<>]+)@([^\s@,:"<>]+\.[^\s@,:"<>.\d]{2,}|(\d{1,3}\.){3}\d{1,3})$'
ist ebenfalls nur rudimentär und nur darauf ausgerichtet:
- mögliche Vertipper oder fehlende Eingaben zu erkennen und
- Manipulationen bei Nutzung der mail()-Funktion zu verhindern.
Ich habe bewußt gequoteten Freitext nicht zugelassen, da ja i.d.R. nur die reine Mailadresse abgefragt wird. Und die Prüfung auf IPs habe ich auch stark vereinfacht, weil mir die Erkennung grober Eingabefehler schon ausreicht.
Worauf ich nicht sofort kam, war die Möglichkeit der Negierung(...)
Nunja, ich komme zumindest noch nicht so gut damit klar.
Ich hab zwar daran gedacht, mir aber dann überlegt, dass ich z.B. doppelte '@' auch mit substr_count() filtern kann.
Danke für deine Hinweise!
Grüße, Matze
Hallo Ingo!
Ich prüfe E-Mails so.
'^([^\s@,:"<>]+)@([^\s@,:"<>]+\.[^\s@,:"<>.\d]{2,}|(\d{1,3}\.){3}\d{1,3})$'
Wieso kann ich damit \r\n, \r und \n eingeben?
Oder versteh ich da grad was falsch?
Danke und Grüße,
Matze
Hi,
Wieso kann ich damit \r\n, \r und \n eingeben?
das sind doch keine Whitespaces - bzw. können es erst werden bei unbehandelter Weiterverarbeitung durch PHP, aber dagegen sollte man ja ohnehin stripslashes() anwenden.
dass ich z.B. doppelte '@' auch mit substr_count() filtern kann.
das war übrigens auch mein erster Ansatz. ;-)
freundliche Grüße
Ingo