Welche eMail-Validierung würdet Ihr bevorzugen ?
Enrico
- meinung
0 Sven Rautenberg0 Tom0 Rolf Rost0 Sven Rautenberg0 Tom
0 MudGuard
0 dbenzhuser
Hallo,
Welche Überprüfung einer eingegebenen eMail-Adresse über Javascript würdet Ihr bevorzugen (die serverseitige Prüfung folgt natürlich auch noch).
**************
* VARIANTE 1 *
**************
function checkValidation (addressField)
{
if (noAtSign (addressField.value))
// Fehler 3
else
if (nothingBeforeAt (addressField.value))
// Fehler 4
else
if (noLeftBracket (addressField.value))
// Fehler 5
else
if (noRightBracket (addressField.value))
// Fehler 6
else
if (noValidPeriod (addressField.value))
// Fehler 7
else
if (noValidSuffix (addressField.value))
// Fehler 8
else
return (true);
return (false);
}
function linkCheckValidation (formField)
{
if (checkValidation (formField) == true)
{
alert ('E-Mail Address Validates OK');
}
return (false);
}
function noAtSign (address)
{
if (address.indexOf ('@', 0) == -1)
return (true)
else
return (false);
}
function nothingBeforeAt (address)
{
if (address.indexOf ('@', 0) < 1)
return (true)
else
return (false);
}
function noLeftBracket (address)
{
if (address.indexOf ('[', 0) == -1 && address.charAt (address.length - 1) == ']')
return (true)
else
return (false);
}
function noRightBracket (address)
{
if (address.indexOf ('[', 0) > -1 && address.charAt (address.length - 1) != ']')
return (true);
else
return (false);
}
function noValidPeriod (address)
{
if (address.indexOf ('@', 0) > 1 && address.charAt (address.length - 1) == ']')
return (false);
if (address.indexOf ('.', 0) == -1)
return (true);
return (false);
}
function noValidSuffix (address)
{
if (address.indexOf ('@', 0) > 1 && address.charAt (address.length - 1) == ']')
return (false);
var len = address.length;
var pos = address.lastIndexOf ('.', len - 1) + 1;
if ((len - pos) < 2 || (len - pos) > 3)
return (true);
else
return (false);
}
**************
* VARIANTE 2 *
**************
function email_pruefen (inhalt, feld_art)
{
inhalt = inhalt.toLowerCase();
if (inhalt.length < 7 || inhalt.indexOf("@.") != -1 || inhalt.indexOf("-.") != -1 || inhalt.indexOf("_.") != -1 || inhalt.indexOf("..") != -1 || inhalt.indexOf("._") != -1 || inhalt.indexOf(".-") != -1 || inhalt.indexOf(".@") != -1 || inhalt.indexOf("@-") != -1 || inhalt.indexOf("@_") != -1 || inhalt.indexOf("@") != inhalt.lastIndexOf("@") || inhalt.indexOf("@") == -1 || inhalt.indexOf(".") == -1 || (inhalt.length - (inhalt.lastIndexOf(".") + 1)) < 2)
return (fehler = true);
else
{
ausdruck = /[1]*[a-z0-9_]@[a-z0-9][a-z0-9-.]*[a-z0-9].[a-z][a-z]$¦[2]*[a-z0-9_]@[a-z0-9][a-z0-9-.]*[a-z0-9].aero$¦[3]*[a-z0-9_]@[a-z0-9][a-z0-9-.]*[a-z0-9].biz$¦[4]*[a-z0-9_]@[a-z0-9][a-z0-9-.]*[a-z0-9].coop$¦[5]*[a-z0-9_]@[a-z0-9][a-z0-9-.]*[a-z0-9].com$¦[6]*[a-z0-9_]@[a-z0-9][a-z0-9-.]*[a-z0-9].edu$¦[7]*[a-z0-9_]@[a-z0-9][a-z0-9-.]*[a-z0-9].gov$¦[8]*[a-z0-9_]@[a-z0-9][a-z0-9-.]*[a-z0-9].info$¦[9]*[a-z0-9_]@[a-z0-9][a-z0-9-.]*[a-z0-9].int$¦[10]*[a-z0-9_]@[a-z0-9][a-z0-9-.]*[a-z0-9].mil$¦[11]*[a-z0-9_]@[a-z0-9][a-z0-9-.]*[a-z0-9].museum$¦[12]*[a-z0-9_]@[a-z0-9][a-z0-9-.]*[a-z0-9].name$¦[13]*[a-z0-9_]@[a-z0-9][a-z0-9-.]*[a-z0-9].net$¦[14]*[a-z0-9_]@[a-z0-9][a-z0-9-.]*[a-z0-9].org$¦[15]*[a-z0-9_]@[a-z0-9][a-z0-9-.]*[a-z0-9].pro$/i;
if (ausdruck.test(inhalt))
{
ausdruck = /[16]/i;
if (!(ausdruck.test(inhalt)))
return (fehler = true);
}
else
return (fehler = true);
}
return fehler;
}
Enrico
Moin!
Welche Überprüfung einer eingegebenen eMail-Adresse über Javascript würdet Ihr bevorzugen (die serverseitige Prüfung folgt natürlich auch noch).
Keine von beiden. Bei beiden Varianten habe ich das dumme Gefühl, dass gültige Mailadressen als ungültig abgewiesen werden.
Wenn du ohnehin serverseitig prüfst (dort stehen dir mehr Mittel zur Verfügung, u.a. Zugriff auf DNS etc.), solltest du mit Javascript nur die einfachsten DAU-Fehler berücksichtigen:
1. Eine Mailadresse ohne @ ist keine.
2. Eine Mailadresse ohne ordentliche Domain (die enthält mindestens einen Punkt) ist auch keine.
3. Eine Mailadresse ohne User-Anteil vor dem @ ist auch keine.
Der Rest ist auf dem Server zu regeln.
An Variante 2 ist insbesondere die explizite Nennung der gültigen Top-Level-Domains zu kritisieren, während ich bei Variante 1 vermute, dass Top-Level-Domains unzulässig in der Länge begrenzt sind.
- Sven Rautenberg
Hello,
- Eine Mailadresse ohne ordentliche Domain (die enthält mindestens einen Punkt) ist auch keine.
Diese Prüfbedingung hat mir mal seeehr viel Ärger bereitet. Es war nämlich nicht mehr möglich, lokale Mailkonten anzusprechen (thomas@localhost).
Liebe Grüße aus http://www.braunschweig.de
Tom
Hello,
- Eine Mailadresse ohne ordentliche Domain (die enthält mindestens einen Punkt) ist auch keine.
Diese Prüfbedingung hat mir mal seeehr viel Ärger bereitet. Es war nämlich nicht mehr möglich, lokale Mailkonten anzusprechen (thomas@localhost).
Jow, hatte ich auch schon. Im Übrigen denke ich, dass es bei einem lumpigen Feedbackformular Zeitverschwendung ist, den korrekten Syntax einer eingegebenen Mailadresse zu prüfen, weil: der Mailgateway prüft ja auch. Und falls es wirklich mal Unstimmigkeiten gibt, hinsichtlich der Erreichbarkeit eines Webmasters, im Impressum stehen:
Gruss, Rolf
Moin!
- Eine Mailadresse ohne ordentliche Domain (die enthält mindestens einen Punkt) ist auch keine.
Diese Prüfbedingung hat mir mal seeehr viel Ärger bereitet. Es war nämlich nicht mehr möglich, lokale Mailkonten anzusprechen (thomas@localhost).
Das sind Sonderbedingungen, die man natürlich weiß, wenn man sowas einrichtet. Oder erwartest du, unter der o.a. Adresse Mails aus dem Internet zu empfangen?
- Sven Rautenberg
Hello,
Das sind Sonderbedingungen, die man natürlich weiß, wenn man sowas einrichtet. Oder erwartest du, unter der o.a. Adresse Mails aus dem Internet zu empfangen?
Wär doch bestimmt mal lustig, oder?
Liebe Grüße aus http://www.braunschweig.de
Tom
Hi,
An Variante 2 ist insbesondere die explizite Nennung der gültigen Top-Level-Domains zu kritisieren,
Und die Beschränkung auf wenige Zeichen: a-z0-9-.
Umlautdomains existieren aber (leider).
cu,
Andreas
Moin,
Und die Beschränkung auf wenige Zeichen: a-z0-9-.
Umlautdomains existieren aber (leider).
Aber nicht in Mailaddressen.
Hi,
Umlautdomains existieren aber (leider).
Aber nicht in Mailaddressen.
Wie kommst Du darauf, daß diese in Mail-Adressen nicht existieren dürfen?
cu,
Andreas
Moin,
Wie kommst Du darauf, daß diese in Mail-Adressen nicht existieren dürfen?
http://groups.google.com/groups?as_umsgid=<1295.962.1078571139%40news.jors.net>
Hi,
Wie kommst Du darauf, daß diese in Mail-Adressen nicht existieren dürfen?
http://groups.google.com/groups?as_umsgid=<1295.962.1078571139%40news.jors.net>
Und?
Da setz ich doch mal ganz locker http://www.müller.de/ dagegen, insbes. auch http://www.müller.de/impressum.html
cu,
Andreas
Moin,
Da setz ich doch mal ganz locker http://www.müller.de/ dagegen, insbes. auch http://www.müller.de/impressum.html
Hmm, das ist eher eine 'Begründung' auf »onclick="javascript:alert('foo')" funktioniert aber!!!1!!1eins«-Niveau. Wenn du jetzt gesagt hättest, »RFC 3490 Abschnitt 2 definiert den Teil einer Email-Addresse der dem @ folgt als domain name slot, der nicht-IDN-aware ist (da die entsprechende Spezifikation aus Vor-IDNA-Zeiten stammt), und Abschnitt 3.1 verlangt, dass IDNs in solchen Slots nur ASCII-Zeichen enthalten, also mit ToASCII bearbeitet werden«, dann wäre das vielleicht diskussionsfähig.
;-)
Hi,
Hmm, das ist eher eine 'Begründung' auf »onclick="javascript:alert('foo')" funktioniert aber!!!1!!1eins«-Niveau.
War Dein Argument denn auf höherem Niveau?
Der Kommentar irgendeines Menschen, der
<cite>
Ich warte ja noch auf den ersten Deppen, der mir mit
| From: "Voll Idiot" <voll.idiot@äöü.de>
daherkommt
</cite>
schreibt, ist für mich auch kein wirkliches Argument gegen die Zulässigkeit von IDN bei mail.
cu,
Andreas
Hi,
Wie kommst Du darauf, daß diese in Mail-Adressen nicht existieren dürfen?
http://groups.google.com/groups?as_umsgid=<1295.962.1078571139%40news.jors.net>Und?
Da setz ich doch mal ganz locker http://www.müller.de/
dagegen, insbes. auch http://www.müller.de/impressum.html
http://www.müller.de/impressum.html
http://www.denic.de/de/domains/idns/tool.jsp ;-))
Laut http://www.faqs.org/rfcs/rfc3490.html soll die Auflösung der Umlaute ja im Client-System auf Applicationebene stattfinden. Das heißt, dass der Nutzer www.müller.de eingibt und der Browser http://www.xn--mller-kva.de/ draus macht. Der Server sieht also Umlaute nie. Ebenso wird es doch mit Umlauten in E-Mail-Domains sein. Der Mailclient macht aus info@müller.de erst info@xn--mller-kva.de. Der Server sieht keinen Umlaut. Serverseitig müssen also auch die Vorgaben für URI und Internet Message Format nicht geändert werden.
Sehe ich das falsch?
viele Grüße
Axel
Hallo Axel,
[...]
Sehe ich das falsch?
Nein, die RFC sagt genau das aus.
Grüße,
CK
N'Obend
Unter http://aktuell.de.selfhtml.org/tippstricks/programmiertechnik/email/index.html findest du recht elegante Lösungen zur Email-Valdidierung, auch für JavaScript.
********
function checkEmail(email) {
var proto = "(mailto:)?";
var usr = "([a-zA-Z0-9][a-zA-Z0-9_.-]*|"([^\\\x80-\xff\015\012"]|\\[^\x80-\xff])+")";
var domain = "([a-zA-Z0-9][a-zA-Z0-9._-]*\.)*[a-zA-Z0-9][a-zA-Z0-9._-]*\.[a-zA-Z]{2,5}";
var regex = "^" + proto + "?" + usr + "@" + domain + "$";
var rgx = new RegExp(regex);
return rgx.exec(email) ? true : false;
}
********
Das Ding hab ich (in leicht abgewandelter Form und in Verbindung mit anschließender Serverseitigen Überprüfung...) hier auch im Einsatz. Scheint mir recht solide.
Tschö,
dbenzhuser
Hi,
var domain = "([a-zA-Z0-9][a-zA-Z0-9._-]*\.)*[a-zA-Z0-9][a-zA-Z0-9._-]*\.[a-zA-Z]{2,5}";
Mindestens eine Top-Level-Domain wird ausgeschlossen (.museum hat 6 Zeichen).
Und Umlaut-Domains werden auch ausgeschlossen.
cu,
Andreas
Hallo.
Und Umlaut-Domains werden auch ausgeschlossen.
Sehr gut, dann werde ich das Skript auch weiterempfehlen ;-)
MfG, at