regulärer Ausdruck

Gardiner

Grünschnabel
Hallo,

ich versuche mich gerade in die regulären Ausdrücke reinzudenken. Dazu möchte ich gerne einen, den ich in einer eMail-Prüffunktion gefunden habe, zu verstehen:

PHP:
preg_match("/^( [a-zA-Z0-9] )+( [a-zA-Z0-9\._-] )*@( [a-zA-Z0-9_-] )+( [a-zA-Z0-9\._-] +)+$/" , $email))

Bis zum @ habe ich das glaube ich verstanden: Delimiter / - dann Geginn Zeichenkette - dann ein oder mehrere Buchstaben oder Ziffern- dann weitere Buchstaben, Ziffern, Punkt (maskiert), Unterstrich oder Minus - dann das @.
Danach prüft der Auto der Funktion für mich auf Buchstabe, Ziffer - und das verstehe ich jetzt nicht - Unterstich oder Minus. Würde das nicht bedeuten, dass die Domain mit einem Minus beginnen kann?

Habe ich einen Denkfehler und wenn ja wo?

Zudem verstehe ich das + vor der hinteren Klammer nicht.

Gruß, Gardiner
 
Zuletzt bearbeitet:
So müsste sie wohl aussehen:
PHP:
preg_match('/[[:alpha:]]([\.][[:alpha:]]|[[:alnum:]_-])*@[[:alpha:]]([\.][[:alpha:]]|[[:alnum:]])*\.[a-z]{2,4}/', $addresse);

Das ist zwar noch keine optimale Lösung, da momentan keine Einbuchstabennamen unterstützt werden, aber ansonsten dürfte das so gehen.
 
Zum Verstehen und Lernen von regulären Ausdrücken ist das sicherlich keine schlechte Übung, generell wäre ich aber sehr vorsichtig bei regulären Ausdrücken für eMail-Adressen.
Laut RFC ist da mehr erlaubt als Mancher glaubt: RFC2822
Nämlich nicht nur [:alnum:]_- sondern: A-Za-z0-9.!#$%&'*+-/=?^_`{|}~

Laut RFC wäre es also etwa so etwas:
Code:
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
(von: hier)
 
Hallo,

deutsche Umlaute bitte auch nicht vergessen ;)
http://österreich.at
postmaster@österreich.at

// Edit: Ich verwende schon länger den folgenden RegEx:
Code:
^[a-z0-9äöü!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9äöü!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-zäöü0-9](?:[a-zäöü0-9-]*[a-zäöü0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$

Gruß
BK
 
Zuletzt bearbeitet:
Umlaute aber nur in der Domain! Zumindest laut Wikipedia sind sie im local part verboten.
Außerdem kann man auch andere ASCII-Sonderzeichen benutzen, wenn man sie escaped:
Wikipedia:
Andere Zeichen, wie zum Beispiel Leerzeichen, können benutzt werden, wenn local-part in doppelte Anführungsstriche eingeschlossen wird oder das Zeichen durch einen umgekehrten Schrägstrich (\) maskiert ist (z. B. ", @, :, ;). Kommentare können innerhalb von runden Klammern ebenfalls eingefügt werden. Alle Zeichen oberhalb des ASCII-Codes 127, also auch Umlaute, sind generell verboten.
 
Zuletzt bearbeitet:
Man könnte ja dann ja einfach die Meldung ausgeben:

"Entweder Ihre Domain existiert nicht oder sie sieht so trottelig aus, dass wir Sie schon deshalb hier nicht haben wollen :) " - naja, kleiner Scherz am Rande.

Gruß und Dank euch, Gardiner
 

Neue Beiträge

Zurück