Seite 1 von 1

String prüfen ob es wirklich eine Email ist ?

Verfasst: Freitag 7. August 2009, 11:50
von Hubi
Guten Tag alle zusammen.

Ich sollte in meinem python module eine Emailprüfung einbauen.

Ob der String, welcher ich aus der DB lese wirklich ein String ist:

gibt es da in python irgendetwas schlaues ?

irgendwo so : string@string.string (höchstens 3 stellen)

.*@.*\. (und dann nur noch 3 stellen welche a-z sind)

gibt es da irgendwelche speziellen prüfkritieren ? besten dank

Sorry, bin ein bissel im stress, und kann mich leider nicht in das ganze Regex modul einlesen :(

Verfasst: Freitag 7. August 2009, 11:54
von lutz.horn
Das ist ein beliebtes Problem :) Der relevante Teil von RFC 2822 beschreibt die Grammatik. Wie Du siehst, ist Dein Vorschlag zu einfach.

Verfasst: Freitag 7. August 2009, 11:56
von Hubi
hoppla, nicht "ob mein string ein string ist", sondern "ob mein string wirklich eine Email ist" wollte ich eigneltich schreiben :)

Verfasst: Freitag 7. August 2009, 12:04
von Rebecca
Du bist nicht der erste, der eine RegEx mit der Aufgabe erstellen will, google mal danach. Das hier finde ich sehr interessant: http://www.regular-expressions.info/email.html

Verfasst: Freitag 7. August 2009, 12:06
von Hubi
wow besten dank, bin jetzt seit 10min am googlen, habe aber nicht annährend so was schlaues gefunden wie du mir geposted hast, besten dank

(bin eben noch ein bissel ein python noob) :)

Verfasst: Freitag 7. August 2009, 12:20
von EyDu
Du hast es in 10 Minuten nicht geschafft nach "regular expression validate email addressl" zu suchen, obwohl das dein Problem ist? :?

Verfasst: Freitag 7. August 2009, 12:28
von Rebecca
Bei "regular expression validate email" ist es gleich der erste Treffer. Hat mit Python ueberhaupt nichts zu tun.

Verfasst: Freitag 7. August 2009, 12:43
von Hubi
hmmm.... wieso geht meine prüfung nicht:

re.match('[A-Z0-9._%+-]*+@[A-Z0-9.-]*', field)

so gets: re.match('[A-Z0-9._%+-]*', field)

aber mit der prüfung und dem @ gets nicht mehr :(

(bau es schritt für schritt zusammen)

Verfasst: Freitag 7. August 2009, 12:59
von DasIch
Du kannst mit Regular Expressions keine E-Mail Addresse validieren, es sei den du erlaubst nur Addressen ohne Kommentare und selbst dann ist die Regular Expression viel zu kompliziert als dass man es ernsthaft als Lösung in betracht ziehen könnte.

Verfasst: Freitag 7. August 2009, 13:32
von derdon
Du könntest Formencode verwenden; dessen email-Validator kann - sofern es denn gewünscht ist - prüfen, ob die email-adresse nicht nur dem gültigen Muster entspricht, sondern auch, ob diese Adresse wirklich existiert.

Hier der Link, der die entsprechende Klasse dokumentiert: http://formencode.org/modules/validator ... tors.Email

Verfasst: Freitag 7. August 2009, 13:45
von Hubi
habs nun so gemacht, für die die es interessiert:

Code: Alles auswählen

if re.match('^[a-z,A-Z,0-9,_,\-,\.]{2,}@[a-z,A-Z,0-9,_,-,\.]{2,}\.[a-z,A-Z,0-9,-,_]{2,4}($|\,)', field):

Verfasst: Freitag 7. August 2009, 14:28
von BlackJack
@Hubi: Also ich habe ein Alias "m(ät)rc.rintsch.de", welches von Dir zurückgewiesen würde. Andererseits erlaubst Du Kommata in den einzelnen Teilen. Wäre ,,@,,,.,, wirklich eine valide E-Mail-Adresse? Und wer sagt, dass die Top-Level-Domain zwischen zwei und vier Zeichen lang ist? Was ist, wenn sie übermorgen längere einführen? So etwas wie '.info' gibt es schliesslich auch noch nicht sooo lange.

Verfasst: Freitag 7. August 2009, 14:32
von cofi
BlackJack hat geschrieben:Was ist, wenn sie übermorgen längere einführen? So etwas wie '.info' gibt es schliesslich auch noch nicht sooo lange.
Es gibt schon ``.museum`` ;)
Die Frage dabei ist natuerlich immer, was man da als valide ansieht und akzeptieren will, du faellst da einfach durchs Raster BJ :twisted:

@OP Bediene dich doch bei den RegExp auf von Rebecca verlinkten Seite (fuer Python umschreiben nicht vergessen).

Zum Schreiben/Debuggen gibts da uebrigens das nette Programm ``Kodos``.

Verfasst: Freitag 7. August 2009, 15:09
von snafu
Dazu die verlinkte Seite:
To include .museum, you could use ^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$. However, then there's another trade-off. This regex will match john@mail.office. It's far more likely that John forgot to type in the .com top level domain rather than having just created a new .office top level domain without ICANN's permission.

Verfasst: Freitag 7. August 2009, 15:46
von DasIch
@snafu Darüber sollte man sich beim validieren keine Gedanken machen, wenn dass ein Problem ist prüft man ob die Adresse existiert.

Verfasst: Freitag 7. August 2009, 16:07
von snafu
Stimmt, es geht da ja mehr um die Wahrung der Form.

Verfasst: Samstag 8. August 2009, 09:45
von Leonidas
BlackJack hat geschrieben:@Hubi: Also ich habe ein Alias "m(ät)rc.rintsch.de", welches von Dir zurückgewiesen würde.
Das erinnert mich an einen Kollegen der "Bo" heißt und durchaus ab und zu Probleme mit Formularen hat, weil Vornamen bekanntlich ja mindestens drei Zeichen haben.

Verfasst: Samstag 8. August 2009, 16:43
von Defnull
Du willst gar nicht prüfen, ob die Adresse RFC 5322 konform ist, glaub mir. Du willst in Wirklichkeit etwas ganz anderes Wissen:
  • Kann ich den Benutzer über diese Adresse kontaktieren?
  • Ist seine Eingabe schädlich für die damit arbeitenden Scripte?
  • Hat sich der Benutzer vertippt? Kann ich ihm helfen, seinen Fehler zu bemerken?
Punkt 1 ist unmöglich mit einer bloßen Betrachtung der Adresse zu beantworten. Du musst schon eine E-Mail schicken oder wenigstens den zuständigen Mail-Server fragen, ob die Adresse existiert. Das können echte MTAs (Mail Transfer Agent) in der Regel am besten. "Live" geht das sowieso nicht, da viele Mailserver solche Fragen erst nach einer beachtlichen Wartezeit beantworten, um Spam zu vermeiden (Greylisting).

Für Punkt 2 reicht es meistens aus, Steuer- und Whitespace Zeichen zu verbieten oder einfach raus zu filtern und den String je nach Speichermedium sauber zu escapen. Kein großer Aufwand.

Für Punkt 3 wäre ein regulärer Ausdruck schon genau das richtige, aber bei weitem nicht so komplex wie in den verlinkten Beispielen. Tippfehler kann man eh nie ganz verhindern (Buchstabendreher z.B.) also warum sollte man es versuchen? Sowas wie r'.+@.+\..+' reicht denke ich völlig. Wer wirklich auf Nummer sicher geben will, lässt den User die Adresse zwei mal eintippen.

Und noch was generelles: Nette User geben keinen 'illegalen Adressen' ein und verstoßen auch nicht gegen Standards, sondern vertippen sich einfach. Die Fehlermeldung sollte darauf ein gehen. Ein "This doen't look like an e-mail address to me. Are you sure?" klingt viiiiel netter als die so beliebte "Wrong/Illegal/Invalid Address" Fehlermeldungen.

Verfasst: Samstag 8. August 2009, 16:46
von Defnull
Leonidas hat geschrieben:
BlackJack hat geschrieben:@Hubi: Also ich habe ein Alias "m(ät)rc.rintsch.de", welches von Dir zurückgewiesen würde.
Das erinnert mich an einen Kollegen der "Bo" heißt und durchaus ab und zu Probleme mit Formularen hat, weil Vornamen bekanntlich ja mindestens drei Zeichen haben.
Viel schlimmer sind ausländische Studenten aus irgendwelchen afrikanischen Dörfern, die Sonderzeichen im Vornamen und keine Nachnamen haben und auch nicht wissen, wann sie geboren wurden. Das sprengt jede Eingabemaske ;)

Verfasst: Sonntag 9. August 2009, 10:21
von sma
Defnull hat geschrieben:Du willst in Wirklichkeit etwas ganz anderes Wissen: [...]
Genau.

Stefan