Email adresse+ Reguläre Ausdrücke

Hi!

Ich möchte gerne überprüfen, ob die von eine User im Formular eingegebene email Adresse überhaupt Sinn macht. (das heißt sie beginnt mit gültigen Zeichen dann das @ wieder gültige Zeichen ein . und dann noch eine folge aus beliebigen Buchstaben).

Leider hab ich das mit Regulären Ausdrücken nicht hingekriegt.

Kann mir da iregendjemand helfen

Danke!!!

P.S. Das ganze soll einfach in einer if abfrage stehen:
if ($mail =~ //) {}

Ich möchte gerne überprüfen, ob die von eine User im Formular
eingegebene email Adresse überhaupt Sinn macht. (das heißt sie

Das folgende sollte in etwa langen …

if ($val2 =~ /^([a-zA-Z0-9\-\.\_]+)@([a-zA-Z0-9\-\.]+\.[a-z]+)$/)

Klaus

Hi,

/^([a-zA-Z0-9-._]+)@([a-zA-Z0-9-.]+.[a-z]+)$/)

"Diese Adresse ist gueltig, auch wenn sie derzeit @hadiko.de bounct."@cheatah.net

So einfach ist es leider nicht. Klar kann man es sich so einfach machen, wenn man „ein paar“ Fehler akzeptiert. Wenn man es aber richtig machen möchte, kommt man um die Lektüre von RFC 2822 (http://www.ietf.org/rfc/rfc2822.txt) nicht herum.

Übrigens spricht AFAIK[1] nichts gegen eine IP-Adresse als Domain-Part, die von Dir abgelehnt würde. Bei obiger RegExp würde aber bereits „[email protected]“ abgelehnt werden.

Noch ein paar Haarspaltereien: :wink:
In Zeichenklassen muß weder der Punkt, noch der Unterstrich maskiert werden; der Bindestrich auch nicht, wenn er das letzte Zeichen ist. Die erste Zeichenklasse läßt sich auf [\w.-] reduzieren (wobei wie erwähnt deutlich mehr Zeichen möglich sind - selbst bei einem simplen Ansatz; s. RFC 2822, Sektion 3.2.4, atext). Die runden Klammern sind nur nötig, wenn Du den Local- und den Domainpart später separat verwenden möchtest.

Cheatah

So einfach ist es leider nicht. Klar kann man es sich so
einfach machen, wenn man „ein paar“ Fehler akzeptiert. Wenn
man es aber richtig machen möchte, kommt man um die Lektüre
von RFC 2822 (http://www.ietf.org/rfc/rfc2822.txt) nicht
herum.

Darin stimme ich Dir zu. Allerdings ist eine komplette Verifizierung nur mit erheblichem Aufwand machbar. Die obige Lösung ist zwar nicht perfekt, genügt aber den meisten Belangen.

Übrigens spricht AFAIK[1] nichts gegen eine IP-Adresse als
Domain-Part, die von Dir abgelehnt würde. Bei obiger RegExp
würde aber bereits „[email protected]“ abgelehnt werden.

stimmt, für die meisten Eingabeformulare scheint mir dies aber irrelevant,da kaum jemand die IP-Adresse seiner Mail-Domain eingeben wird.
Ja, ich weiß, jetzt kommt der Satz: „Ich probiere sowas und das Skript muss mit allem klarkommen …“ :wink:

In Zeichenklassen muß weder der Punkt, noch der Unterstrich
maskiert werden; der Bindestrich auch nicht, wenn er das
letzte Zeichen ist. Die erste Zeichenklasse läßt sich auf
[\w.-] reduzieren (wobei wie erwähnt deutlich mehr Zeichen
möglich sind - selbst bei einem simplen Ansatz; s. RFC 2822,
Sektion 3.2.4, atext). Die runden Klammern sind nur nötig,
wenn Du den Local- und den Domainpart später separat verwenden
möchtest.

Bzgl. der Klammern gebe ich Dir recht … obiges Codestück wurde dafür mal gebraucht.

also, da Du es nicht machst, hier zumindest ein paar kleine Verbesserungen: :wink:

if ($email =~ /^[a-zA-Z0-9\-.\_]+@[a-zA-Z0-9\-.]+\.[a-zA-Z]+$/)

Hi,

Allerdings ist eine komplette
Verifizierung nur mit erheblichem Aufwand machbar.

je nachdem, was Du mit „komplett“ meinst, kann man lediglich eine Mail verschicken und auf Antwort hoffen :smile:

Die obige
Lösung ist zwar nicht perfekt, genügt aber den meisten
Belangen.

Naja, selbst für die meisten Belange sollte sie noch ein wenig angepaßt werden; siehe vorheriges Posting. Im Prinzip stimme ich aber zu.

Übrigens vergaß ich zu erwähnen:

perldoc -q valid mail address

Dort steht die Antwort schon. Es lebe die Doku.

stimmt, für die meisten Eingabeformulare scheint mir dies aber
irrelevant,da kaum jemand die IP-Adresse seiner Mail-Domain
eingeben wird.

Nicht jede IP hat einen Hostnamen. Es kann dort trotzdem ein Mailserver horchen.

Ja, ich weiß, jetzt kommt der Satz: „Ich probiere sowas und
das Skript muss mit allem klarkommen …“ :wink:

Nö. Ich will nur vor dem Irrglauben warnen, eine kurze RegExp würde ausreichen. Ein paar (praktische!) Probleme für den speziellen Vorschlag habe ich genannt - für andere Vorschläge lassen sich gewöhnlich leicht andere Probleme finden.

also, da Du es nicht machst, hier zumindest ein paar kleine
Verbesserungen: :wink:

Die Verbesserungen waren implizit :wink: Eine Lösung möchte ich nicht vorschlagen, weil diese entweder den Rahmen eines einfachen Postings sprengt, oder aber falsch ist.

/^[a-zA-Z0-9-._]+@[a-zA-Z0-9-.]+.[a-zA-Z]+$/)

„Diese Adresse wuerde immer noch abgelehnt werden!“@cheatah.net

Cheatah

Hallo,

ich hab mal sowas mit PERL regexps gemacht. Hier wird der RegExp Match-Pattern zusammengebaut:

sub get_email_regex
{
my($protocol)= qq;

my($dot)=’.’;

my($IPAddress) = qq;

my($topleveldomain) = qq;

my($subdomain) = qq;

my($domain) = qq;

my($requeststring) = qq]*
)?
>;

my($url) = qq;

my($dummyurl) = qq;

my($email) = qq;

return $email;
}

Bitte beachten: Die Top-Level-Domain hat hier noch max. 3 Zeichen, und ein Problem gibt es noch: [email protected] würde als mail durchgehen…

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi,

ich hab mal sowas mit PERL regexps gemacht.

sieht für mich so aus, als versuchtest Du, URLs zu erkennen. Die RFC-konforme RegExp dafür hat aber satte acht Kilobyte - siehe http://www.teamone.de/selfhtml/sfarchiv/2000_3/t2172…

Leider ist gerade der mailto-Teil nicht vollständig. Da hat es sich der Autor (ich weiß leider nicht, wer das war) zu einfach gemacht; er hat nur RFC 1738 beachtet, nicht aber den (damals gültigen, heute gilt 2822) RFC 822.

my($dummyurl) = qq

Danke für Eure Antworten.

Für meine Bedürfnisse ist ein genauer Check nicht notwendig, eine grobe kontrolle reicht erst mal.