Validierung eines Formulars: E-Mail (mit einem regulären Ausruck)

Noeden

Erfahrenes Mitglied
Hallo,

ich werde leider nicht fündig und drehe ob der ganzen Informationen ein wenig durch :-D

Ich hoffe ihr könnt mir helfen.
Also ich habe ein Formular, und darauf greife ich per jQuery zu. Ich würde gerne prüfen, ob das tatsächlich eine emailadresse ist, die dort eingegeben wurde. Dann habe ich mir gedacht, sie besteht mindestens aus:

Mind 3 Zeichen, die kleine/große Buchstaben und Zahlen sein können
einem @
Mind. 2 Zeichen, die kleine/große Buchstaben und Zahlen sein könne (können da Zahlen sein?)
einem Punkt
und noch mindestens einem Zeichen (klein/groß)

Da bin ich auf folgenden regulären Ausdruck gekommen, ist das richtig?

Werden da ß mit einbezogen? Wenn nein, wie mache ich das? Und wie gleiche ich das jetzt mit $("#RegistrierungFormularEmail").val() ab? Per match?
Und wie prüfe ich, dass die komplette Eingabe dieses Kriterium erfüllt und nicht nur ein Teil. Bsp:

"gsaüobsndg sdbougüsbdg opis sdhgoü sodig Max.Mustermann@gmx.de" erfüllt das auch.

Und jetzt fällt mir schon auf, dass auch Punkte _ und - in emails sein können. Noch mehr Zeichen?

Wäre das die richtige Konsequenz:

[a-zA-Z0-9/\-_.]{3,}[@][a-zA-Z0-9]{2,}[.][a-zA-Z]+

Sorry, aber wie ihr sicherlich merkt bin ich ein wenig verwirrt :_D


Danke
 
Da bin ich auf folgenden regulären Ausdruck gekommen, ist das richtig?

Deine Annahmen sind leider nicht ganz richtig. Es können vor dem @ auch Punkte vorkommen und nach dem @ auch mehr als einer. Außerdem gibt es Domains die nur ein Zeichen lang sind (z.b. http://www.x.com). Des weiteres gibt es inzwischen UTF8 Domains, was das ganze nicht einfacher macht. Insgesamt ist die Prüfung der E-Mail also nicht ganz so trivial.

Und wie gleiche ich das jetzt mit $("#RegistrierungFormularEmail").val() ab? Per match?
Per "test". Also

Javascript:
//Mindest eine Zahl
if(/[0-9]+/.test('1337')) {

}


Und wie prüfe ich, dass die komplette Eingabe dieses Kriterium erfüllt und nicht nur ein Teile

Dafür kann man bei regulären Ausdrücken den Anfang und das Ende des String markieren.

Javascript:
//Mindest eine Zahl oder mehr. Sonst NICHTS
if(/^[0-9]+$/.test('1337')) {

}



Such dir am besten im Netz einen passenden Ausdruck aus. Kommt aber auch drauf an, wie "genau" dein Ausdruck sein soll. Sollen z.B. Top Level Domains möglich sein, die es garnicht gibt? Man kann das bel. komplex machen.
 
Danke schonmal für deine Antwort!

Aber selbst wenn man den String Anfang und das Ende markiert kann es doch immernoch sein, dass da noch mehr Wörter drin sind, oder verhindert das die Methode test?

Dann werde ich mich mal an meinen Ausdruck setzen und den nochmal posten, würde aber gerne einen hinkriegen, damit ich das ein wenig verinnerlichen kann.


Ich danke dir schonmal recht herzlich


Nachtrag: /^[a-z0-9._\-ßäöü@]+@[a-z0-9._\-ßäöü@]+.[a-z]+$/i Das sollte doch seinen Zweck erfüllen oder? Abgesehen davon, dass auf meiner Miniseite wohl kaum jemand mit einer exotischen e-mail auftauchen würde ;)

Danke
 
Zuletzt bearbeitet:
Aber selbst wenn man den String Anfang und das Ende markiert kann es doch immernoch sein, dass da noch mehr Wörter drin sind, oder verhindert das die Methode test?

Du testest mit der Methode doch den ganzen String. Und da der Ausdruck den Anfang und das Ende des Strings beinhaltet, ist da überhaupt kein Platz für weiteres.

/^[a-z0-9._\-ßäöü@]+@[a-z0-9._\-ßäöü@]+.[a-z]+$/i Das sollte doch seinen Zweck erfüllen oder? Abgesehen davon, dass auf meiner Miniseite wohl kaum jemand mit einer exotischen e-mail auftauchen würde

Wenn du exotische Mails nicht erwartest, dann kannst du dir auch die drei Umlaute und das Eszett sparen.
Ich hab deinen Ausdruck mal an 260 Adressen getestet, da hat er immer true ergeben. Du musst bedenken, dass es viel wichtiger ist, alle E-Mail Adressen zu erkennen, als falsche zu filtern. Denn ein Besucher wird wohl genervt sein, wenn du ihm sagst, seine Adresse sei ungültig.

Du könntest auch einen ganz allgemeinen Ausdruck wählen, der wirklich viel durchlässt.

Code:
/^[^@]+@[^@]+\.[^@]+$/i

Also mindestens ein Nicht-@ gefolgt von genau einem @, dann mindestens ein Nicht-@ gefolgt von Punkt und nochmal mindestens ein Nicht-@. Jetzt könnte man zu den Ausschluss-Zeichen noch welche einfügen, die ganz sicher nicht vorkommen. Damit hast du eine Black-List, was in dem Fall viel besser ist als eine White-List, weil du ja niemanden verärgern willst.

Code:
/^[^@§+ ]{1,64}@[^@§+ ]+\.[^@§+ ]+$/i

Du kannst dir ja noch ein paar mehr Zeichen suchen, hab nur ein paar Beispiele genommen.

Edit: Scheinbar dürfen diverse Sonderzeichen doch in der Adresse vorkommen
http://en.wikipedia.org/wiki/Email_address#Syntax

Characters ! # $ % & ' * + - / = ? ^ _ ` { | } ~

Conversely, many websites check email addresses much more strictly than the standard specifies, rejecting addresses containing valid characters like + or / signs, or setting arbitrary length limitations (e.g., 30 characters).
 
Zuletzt bearbeitet:
Cool danke :)

Dann mach ich mir die Blacklist, daran habe ich noch gar nicht gedacht.

Herzlichen Dank!
 
Nochmal ne kurze Frage, die damit zu tun hat.
Code:
var pruef = '/^' + ("#RegistrierungFormularEmail").val() + '$/i';
            var pruef2 = new RegExp(pruef);
            for(var i=0; i < VorhandeneMailRegistrierung.length;i++){
                if(pruef2.test(VorhandeneMailRegistrierung[i])){fehler++;}
            }

Funktioniert das an sich nicht, oder habe ich nur einen Fehler gemacht? Denn wenn das so gar nicht funktioniert und ich hier nach nem Fehler suche, den es gar nicht gibt werde ich fuxig :-D

Danke
 
Du mischst zwei Sachen. Mittels / kann man Reguläre-Ausdruck-Literale erstellen, welche man direkt verwenden kann. Willst du aber ein neues RegExp Object erstellen wird als erster Parameter der Reguläre Ausdruck erwartet (OHNE /) und als zweiter die Modifier.

Javascript:
var pruef = '^' + ("#RegistrierungFormularEmail").val() + '$';
var pruef2 = new RegExp(pruef, 'i');
 
Danke *asche auf mein Haupt *

Ich glaub ich hab heute genug und schau mir das morgen nochmal an, heute ist nicht mein Tag :D dann lese ich mir das alles nochmal durch! Ich bin Dir auf jeden Fall sehr dankbar
 
Zurück