Moin!
function verifiziereEmail ($testString) {
if (eregi("^([[:alnum:]]|_|.|-)+@([[:alnum:]]|.|-)+(.)([a-z]{2,4})$", $testString)) {
return 1;
} else {
return 0;
}
}Kann mir jemand sagen was ich machen muss dass es mir die Umlaute nicht mehr blockiert?
Dein regulärer Ausdruck zur Abwehr ungültiger Mailadressen ist sowieso fehlerhaft. Er lehnt gültige Mailadressen ab, die Top-Level-Domains mit mehr als vier Zeichen nutzen. Derzeit existiert mindestens die TLD ".museum", über die TLD ".africa" wird gerade diskutiert. Was sonst noch so erfunden werden wird, ist nicht absehbar. Aus diesem Grund ist jeglicher Versuch, bei der TLD irgendeine Längenbeschränkung einzuführen, grundsätzlich ungünstig und lieber zu unterlassen. Es würde nur zu ewigem Pflegeaufwand führen.
Weiterhin erscheint mir der Teil, der die Subdomains checken soll, auch nicht so ganz kosher. Und zu guter Letzt hast du grundsätzlich das Problem, dass es ja mittlerweile Domains nicht nur mit ASCII-Zeichen gibt, sondern theoretisch beliebige Unicode-Zeichen möglich sind, und ein unbedarfter User die Domain vermutlich auch exakt so eingeben würde, und nicht den zugehörigen IDN-String.
Zum Thema "Sonderzeichen im Local-Part" der Mailadresse verliere ich lieber gar kein weiteres Wort: Hier kann grundsätzlich alles vorkommen, solange man es nur korrekt escaped. Und wenn ein Mailserver mitspielt, ist Escaping vielleicht nicht mal korrekt notwendig.
Im Grunde genommen reduziert sich die machbare Validierungsmöglichkeit auf zwei Alternativen:
1. Entweder man checkt auf das Vorkommen eines @ und danach eines Punktes, sowie sonstiger Zeichen, die sich dazwischen und zwischen Stringanfang und Stringende befinden. Das führt zu folgendem Regex: ^.+@.+..+$
2. Oder man validiert die Mailadresse, indem man letztendlich tatsächlich eine Mail an die Adresse sendet, um auf diese Weise ein Feedback des Mailboxinhabers zu erreichen, indem er einen in der Mail mitgeteilten, nicht durch dritte erratbaren Link aufruft, und so den Empfang bestätigt. Oder eine Mailantwort zurückschickt.
Jegliche Zwischenstufen wie "Ich nutze extrem strenge Regex-Regeln für die Mailadresse" oder "Ich checke die Existenz der angegebenen Domain" sind im Verhältnis ziemlich aufwendig, bergen bei falscher Anwendung die Gefahr der irrtümlichen Zurückweisung, lassen aber letztendlich doch keinen direkten Schluss auf die Existenz und Korrektheit der Mailadresse zu. Dies gilt insbesondere deshalb, weil Mailserver heutzutage die unterschiedlichsten Anti-Spam-Maßnahmen ergreifen, welche in vielen Fällen auch auf einem Zeitfaktor basieren, d.h. eine Mail wird erst angenommen, nachdem der erste Sendeversuch abgewiesen wurde, und derselbe Mailserver es erneut versucht (Greylisting).
- Sven Rautenberg
"Love your nation - respect the others."