Moin!
ich überprüfen in ein Formular eingegebene eMail-Adressen mit:
if (ereg("[1]+(.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+.)+([a-zA-Z]{2,3})$", $email))
{
echo "Richtig";
}
else
{
echo "Falsch";
}
Das klappt auch prima.
Das glaubst leider nur du.
Nur leider werden auch gültige eMail-Adressen in der Form NameIch.@gmx.de (Bei gmx gibt es sowas!!!) als falsch beurteilt - das liegt wohl an dem Punkt vor dem @.
Eben...
Was muss ich ändern, damit das auch damit funktioniert?
Entweder prüfst du die Syntax der EMail-Adressen wirklich vollständig (der Aufbau des passenden Regulären Ausdrucks umfaßt mindestens 20 Programmzeilen), oder du nimmst sowas wie dies hier:
if (ereg(".+@.+..{2,}",$email)
Das prüft im Grunde genommen, ob in der Adressangabe ein @ enthalten ist, und im Domainteil ein Punkt. Die Mindestlänge einer Mailadresse beträgt darüber hinaus 6 Zeichen.
Dein bisheriger Ausdruck hat zum Beispiel das Problem, dass man .info, .name und .museum-Mailadressen nicht eingeben darf. Du läßt nur zwei- oder dreibuchstabige Top-Level-Domains zu. In der Zukunft ist aber zu erwarten, dass noch viel mehr TLDs entstehen werden und nicht nur maximal drei Buchstaben enthalten. Du prüfst aber beispielsweise nicht, ob die angegebene Domain tatsächlich existiert. Insofern kann es dir dann auch egal sein, ob du eine nicht-existente dreibuchstabige Domain kriegst, oder eine zwanzigbuchstabige Domain.
- Sven Rautenberg
_a-zA-Z0-9- ↩︎