regulärer ausdruck

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
Gast

hallo zudammen!

ich habe mich mit regulären ausdrücken gespielt und glaube dass folgender ausdruck so ziemlich jeden unsinn abfängt den ein user bei der angabe seiner mailadresse machen kann (z.b. webseite)

Code: Alles auswählen

from re import *
mail="rolgal@yahoo.de"
re=compile('([a-z]@[a-z]+\.+[a-z])')
if re.search(mail):
	print "eingabe ok"

wie gesagt, so ziemlich alles was mir eingefallen ist wie z.b. "rolgal@.yahoo" ergibt natürlich keine positive meldung.

findet von euch jmd. etwas was "eingabe ok" ausgibt aber keine gülrige mail sein kann?

ansonsten fein, wenn der ausdruck gelungen ist und nützlich ist.

mfg

rolgal
Gast

Als falsch werden z.B. erkannt:
asdf@aSdf.de
asdf@uni-entenhausen.de

Als richtig wird z.B. erkannt:
@@3~~/=)(/\~j@qd....sq@@@q
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Ich würde auch sagen, dass ziemlich viel nicht erkannt wird, was gültig ist:

-in einer Mailadresse sind auch Zahlen gültig
-gleiches gilt für Binde und Unterstriche, allerdings nicht an 1.Stelle und keine Unterstriche in Domains
-Domains können auch Subdomains enthalten. Bsp.: somebody@ef.th.schule.de
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Dann probier mal meine eMaildressen aus.

privat: a.b.ccccccccc@gmx.de
geschäft: xxx@de.zzzzzz.com

beides zulässige Adressen. Aber sind Großbuchstaben nicht zulässig? Wenn die Umlautdomains kommen, dann sind wohl auch Umlaute zulässig. Wird das Lustig, auf einer thailändischen oder russischen Tastatur eine Mail an lieschen@müller.de zu verschicken.

Ich fahre freiwillg hin um es auszuprobieren :lol:

Hans
Gast

hallo


was ich nicht verstehe, ist warum das hier als richtig durchgeht:

@@3~~/=)(/\~j@qd....sq@@@q

???

habe ich bez. reg. ausdrücke am ende gar nichts kapiert?

jedenfalls war es bisher schon sehr aufschlussreich und ich finde es sehr sinnvoll, so vorzugehen, weil man selbst meistens beim testen viel zu eng denkt.

noch ein problem was mir nicht klar ist:
wie kann ich verhindern dass z.b. folgende adresse als richtig durchgeht:
rolgal@yahoo...de

also dass nur ein punkt vorkommen darf.

mfg

rolgal
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi rogal,

na dann schauen wir am besten was Deine Regular Expression macht.

Code: Alles auswählen

'([a-z]@[a-z]+\.+[a-z])'
[a-z] sagt da muss ein alphabetisches Zeichen kommen, was davor kommt ist egal da kann auch kommen @-.;:...
@ sagt danach kommt ein @
[a-z]+ nach dem @ müssen ein oder mehrere alphabetisches Zeichen kommen
\.+ und dann ein oder mehrere Punkte
[a-z] und jetzt noch ein alphabetisches Zeichen, was danach kommt wird wieder ignoriert also kann danach auch wieder alles mögliche kommen

das ganze funktioniert natürlich nicht ausreichend und erkennt viele gültige Mailadressen nicht und lässt auch viel Unsinn gelten.


Gruß

Dookie
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hab mal rumprobiert und Folgendes ist dabei rausgekommen:

Code: Alles auswählen

import re
mail = "rogal@yahoo.de"
mailregex = '^[a-z|0-9][a-z|0-9|_|\-|\.]*@[a-z|0-9][a-z|0-9|\-]*(\.[a-z|0-9][a-z|0-9|\-]*)+$'
mailcheck = re.compile(mailregex, re.IGNORECASE)
if mailcheck.search(mail):
   print "eingabe ok"
Zerlegen wir das mal:
^ Stringanfang, davor kann nichts sein, also auch keine unsinnigen Zeichen
[a-z|0-9] am Anfang muss ein alphanumerisches Zeichen kommen
[a-z|0-9|_|\-|\.]* dann beliebig viele alphanumerisches Zeichen oder - oder _ oder punkt auch beliebig viele
@ und jetzt erst das @
[a-z|0-9] gefolgt von einem alphanumerischen Zeichen
[a-z|0-9|\-]* danach beliebig viele alphanumerische Zeichen oder Minus, auch keinmal
(\.[a-z|0-9][a-z|0-9|\-]*)+ hier kommt jetzt ein oder mehreremale (wegen Subdomains) ein Punkt gefolgt von einem alphanumerischen Zeichen und beliebig vielen (auch keinem) alphanumerischen Zeichen oder Minus
$ Ende des Strings, jetzt ist Schluss, dahinter darf nichts mehr kommen sonst ists keine gültige Emailadresse.

Der zusätzliche Parameter re.IGNORECASE lässt Grosskleinschreibung ignorieren, so braucht man nicht überall bei [a-z], [a-z|A-Z] schreiben.

So das müsste jetzt alle derzeit gültigen Emailadressen erkennen und unsinnige Eingaben zurückweisen.


Gruß

Dookie
Gast

hi dookie!

ich bin inzwischen auch am basteln, nur so kann man das bezeichnen wenn man sowas macht, und meine ausdruck ist schon mächtig gewachsen.

zu deinem: folgende mail adressen sind meines wissens nicht erlaubt:
roga-@web.de oder roga_@web.de

läßt er aber durch

oder irre ich? yahoo lässt sowas jedenfalls nicht zu.


ich stehe momantan hier:

Code: Alles auswählen

re=compile('(^[a-z0-9]+[-_]?[a-z0-9]+@?[a-z0-9]+[-]?\.\w)',I)
lässt oben genannte mailadressen nicht gelten, hat aber noch andere probleme, wie z.b. das zulassen von - nach dem @

nochwas: muss man vor dem - zeichen einen \ machen? ich dachte nur beim punkt, weil der ja sonst eine andere bedeutung hat.

mfg

rolgal
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Code: Alles auswählen

'^[a-z0-9]([a-z0-9_\-\.]*[a-z0-9])?@[a-z0-9][a-z0-9\-]*(\.[a-z0-9][a-z0-9\-]*)+$'
so nun muss der Name aus mindestens einem alpanumerischen Zeichen mit beliebig vielen anschließenden alphanumerischen Zeichen oder Unterstrich, Minus oder Punkt gefolgt von einem Alphanumerischen Zeichen bestehen.

da das - ja auch in Bereichen verwendet wird, ists wohl besser es mit dem Backslash zu maskieren.

Was macht das ? hinter deinem @? Das steht für null oder ein @ aber ein @ muss in der Adresse sein.


Gruß

Dookie
Gast

hi dookie!


ich glaube deiner hat noch ein problem: er lässt folgende mailadressen zu, die meines wissens nicht erlaubt sind:

roland___gall@web.de
roland---gall@web.de
roland...gall@web.de

aber insgesamt ist der ausdruck schon ziemlich nahe dran.

danke mal für deine hilfe an dieser stelle.
ich bin auch wieder am basteln:)

mfg

rolgal
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi Rogal,

ich denke eher das diese Zeichen, wie normale Zeichen behandlet werden innerhalb des ersten Teils der Emailadresse und auch mehrfach vorkommen dürfen wie bei Dampfschifffahrt das f.


Gruß

Dookie
Gast

hi dookie!

du hast wiedermal recht :D
adressen dieser art sind tatsächlich erlaubt. ich habe es gerade auf dem server (hätte ich auch früher drauf kommen können) meiner domain ausprobiert.

es ist sogar was in der art erlaubt
rol-._gal@meinedomain.de (nach punkt underline)

weil man sowas aber nie sieht war ich wohl überzeugt, dass das nicht erlaubt ist.

mfg

rolgal
Antworten