String prüfen ob es wirklich eine Email ist ?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Hubi
User
Beiträge: 17
Registriert: Mittwoch 17. Juni 2009, 10:58

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 :(
Benutzeravatar
lutz.horn
User
Beiträge: 205
Registriert: Dienstag 8. November 2005, 12:57
Wohnort: Pforzheim

Das ist ein beliebtes Problem :) Der relevante Teil von RFC 2822 beschreibt die Grammatik. Wie Du siehst, ist Dein Vorschlag zu einfach.
https://www.xing.com/go/invite/18513630.6a91d4
Hubi
User
Beiträge: 17
Registriert: Mittwoch 17. Juni 2009, 10:58

hoppla, nicht "ob mein string ein string ist", sondern "ob mein string wirklich eine Email ist" wollte ich eigneltich schreiben :)
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

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
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Hubi
User
Beiträge: 17
Registriert: Mittwoch 17. Juni 2009, 10:58

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) :)
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Du hast es in 10 Minuten nicht geschafft nach "regular expression validate email addressl" zu suchen, obwohl das dein Problem ist? :?
Das Leben ist wie ein Tennisball.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Bei "regular expression validate email" ist es gleich der erste Treffer. Hat mit Python ueberhaupt nichts zu tun.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Hubi
User
Beiträge: 17
Registriert: Mittwoch 17. Juni 2009, 10:58

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)
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

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.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

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
Hubi
User
Beiträge: 17
Registriert: Mittwoch 17. Juni 2009, 10:58

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):
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.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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``.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

@snafu Darüber sollte man sich beim validieren keine Gedanken machen, wenn dass ein Problem ist prüft man ob die Adresse existiert.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Stimmt, es geht da ja mehr um die Wahrung der Form.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

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.
Bottle: Micro Web Framework + Development Blog
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

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 ;)
Bottle: Micro Web Framework + Development Blog
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Defnull hat geschrieben:Du willst in Wirklichkeit etwas ganz anderes Wissen: [...]
Genau.

Stefan
Antworten