Jeder, der sich schon einmal mit einem Formular, in der eine E-Mail abgefragt werden muss, beschäftigt hat, der hat entweder selbst versucht, sich mittels RegEx etwas zusammen zu schustern oder hat einfach mal schnell Google bemüht, um sich mal schnell einen toll aussehenden RegEx-Code zu besorgen.Nun ist das Tolle an Google, dass man da auch schnell fündig wird, jedoch kommt hier gleich das erste Problem, man findet 100 verschiedene Varianten, die dann so aussehen könnten.
^[a-zA-Z0-9_]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$
^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$
^[a-z0-9_\+-]+(\.[a-z0-9_\+-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*\.([a-z]{2,4})$
Klasse, sie sehen gut aus, keiner weiß was passiert und ich glaube sie funktionieren sogar. :)Die Frage bei diesen schönen Codes ist nun aber, wie gut sind sie wirklich und decken die alle Eventualitäten ab?Schon auf den ersten Blick sehe ich als Dummie: keiner der Codes ist zeitgemäß, also bin ich dafür, wir versuchen hier den bestmöglichen Code zusammenzustellen, was natürlich nur dann etwas bringt, wenn auch jeder weiß, was wo und wann passiert.Ich mache also hier jetzt den Anfang mit meinem Lieblingscode, den ich mir irgendwann mal zusammengesucht und mit meinen bescheidenen Möglichkeiten angepasst habe.So sieht er nun also aus:
^[\w.+-]{2,}\@[\w.-]{2,}\.[a-z]{2,6}$
Das schöne daran, im Gegensatz zu den oberen, dürfen die Domainendungen nun maximal 6 Zeichen haben, was man hier am Ende sehen kann „[a-z]{2,6}$„Die 2,6 bedeutet nämlich, mindestens 2 Zeichen und maximal 6 Zeichen.Veraltete RegEx Codes haben hier noch eine 2,4 stehen, aber in Zeiten, in denen man auch eine .museum Domain haben darf, ist das natürlich nicht mehr zeitgemäß. Der erste Code ist ganz krass, dort wurde vermutlich schon für das Jahr 3089 geplant. :)Als nächstes Problem kommt nun, dass man bereits seit längerer Zeit Umlautdomains haben darf; was ich davon halte, steht nun auf einem anderem Blatt. Hier auch wieder im Vergleich zu den oberen Codes, dort wird direkt nach a-z gefragt, das heißt logischerweise, dass äöü ein Fehler wäre.Schauen wir uns meinen favorisierten Code also mal an, ich weiß, dass dieser bestimmt noch lange nicht perfekt ist, aber er könnte es ja im Laufe des Beitrages werden.
^[\w.+-]{2,}
Das Zirkumflex ist ja irgendwie immer dabei, das bedeutet nichts weiter, als dass wir einen Zeilenanfang haben.Dann haben wir in Klammern das [\w.+-] Das \w steht für einen Buchstaben (inkl. Umlaute), eine Zahl sowie für einen Unterstrich.Zusätzlich sind die folgenden Zeichen erlaubt die in der Klammer stehen.{2,} bedeutet, dass diese Zeichen mindestens zweimal bis unendlich vorkommen dürfen … auweia … ich sehe schon, das bedarf einer Überarbeitung, unendlich ist nicht wirklich gut, alles muss ja einmal ein Ende haben.Nun kommt das zur E-Mail gehörende @-Zeichen, das wir mit einem \ maskieren müssen, dann geht es wieder mit einem [\w.-]{2,} weiter, das habe ich ja oben schon erklärt, auch hier passt das wieder nicht, unendlich ist unpraktisch, weil ein Domainname ja nur eine bestimmte Länge haben darf. Ich glaube, die liegt bei max. 255 Zeichen.Jetzt kommen wir zu \. Das ist der erforderliche Punkt, der vor der Domainendung sein muss, danach haben wir unser [a-z]{2,6}, was bedeutet, es sind alle Zeichen zwischen a-z erlaubt, sie müssen mindestens zweimal vorkommen, maximal dürfen es sechs Zeichen sein, damit unser User, der sich eine .museum-TLD gesichert hat, auch mit seiner E-Mail hausieren gehen darf.Das $ am Ende bedeutet, dass dieser String auch ein Ende hat.Bei diesem Beitrag sind mir Dummie ja nun gleich schlimme Sachen aufgefallen, also werde ich diesen Code am besten mal gleich anpassen.
^[\w.+-]{2,64}\@[\w.-]{2,249}\.[a-z]{2,6}$
ich habe nun also den Namen auf maximal 64 Zeichen – mehr sind meines Wissens nicht erlaubt – und die Domain vorläufig auf 249 Zeichen gesetzt, da ich mir nicht sicher bin, ob die Endung auch dazu zählt, dies wird im Laufe der Zeit noch geupdated.Ein weiteres Problem sind vermutlich Sonderzeichen wie der Bindestrich, ein Punkt sowie ein Unterstrich, diese dürfen soweit ich weiß nicht vor und auch nicht am Ende des E-Mail-Namens stehen, das wäre also dieser Teil hier:
^[\w.+-]{2,64}
und bereits das erste große Fragezeichen in meinen Augen, da ich noch keinen genauen Plan habe, wie man das absichern kann.
Nachgefragt
Wie validieren unsere Leser E-Mail-Adressen? Einfach in die Kommentare schreiben.