Reguläre Ausdrücke

  • Hallöchen,

    ich hätte mal eine Frage. Wir haben diese Aufgabe bekommen:

    Erstellen Sie einen Regulären Ausdruck, der eine gültige Emailadresse erkennt.

    Könnte mir jemand helfen und sagen wie sowas aussieht? Ich habe echt keine Ahnung. Eine dazugehörige Erklärung wäre auch toll.

    Danke schonmal!

  • dazu muss man zuerst mal wissen, was eine "gültige emailadresse" ist. genau steht das in rfc 5322.
    wenn man sich das genaure anschaut wird man sehen, dass es keinen einfachen regulären ausdruck gibt, eine mailadresse zu überprüfen.
    das beste was ich gefunden habe ist das:

    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])+)\])


    quelle: http://www.regular-expressions.info/email.html
    es gibt noch weitere möglichkeiten (google sollte hier helfen)...
    generell gilt bei solchen validierungen: lieber etwas ungültiges zulassen als etwas gültiges ausschließen...

    "All through my life I've had this strange unaccountable feeling that something was going on in the world, something big, even sinister, and no one would tell me what it was."
    "No," said the old man, "that's just perfectly normal paranoia. Everyone in the Universe has that."

    😁😂😃😄😅😆😇😈😉😊😋😌😍😎😏😐😒😓😔😖😘😚😜😞😠😡😢😣😥😨😩😪😫😭😰😱😲😳😵😶😷

  • Das ganze ist der reguläre Ausdruck? Weil auf dem Link steht doch nicht so viel...

    Vielleicht, weil dein Browser jenen Teil des regulären Ausdrucks, der einen halben Kilometer über den rechten Seitenrand hinaus reicht, nicht anzeigt.

  • Macht die dir gestellte Aufgabe irgendwelche Einschränkungen, was zum Beispiel die verwendeten Zeichen angeht? Vielleicht ist ja nur ein regulärer Ausdruck gesucht, der zu einer Teilmenge aller zulässigen Mailadressen passt.

  • wofür ist denn die aufgabe? ich behaupte einfach mal, dass derjenige, der sie erstellt hat, sich nicht bewusst war dass sie so wenig sinn macht.
    wie gesagt, das was eine gültige email-adresse ist, ist im RFC genau beschrieben, und ist viel komplexer als das, was man täglich an adressen so sieht.
    welche der folgenden adressen sind z.b. gültig:

    a) jack.o'neill@stargate.com
    b) "foo@bar!baz#blah..."@example.com
    c) xx...yy@aaa.bbb
    d) asdf.@qwertz.jkl

    Lösung:

    Spoiler anzeigen


    a) apostroph ist gültig
    b) in einem quoted string ist fast alles erlabut, auch mehr als ein @, gültig
    c) geht so nicht, mehrere punkte hintereinander
    d) punkt vor dem @, nicht erlaubt

    wenn man es sich einfach machen will überprüft man einfach, ob die adresse ein @ enthält, vielleicht noch ob davor und dahinter noch etwas anderes steht.
    dann lässt man sicher alle gültigen mailadressen duch - halt auch viele ungültige.
    oder man macht eine einschränkung, z.b. wie auch unter dem link beschrieben:

    Code
    ^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$


    erkennt zwar viele ungültige mailadressen (aber nicht alle), eliminiert aber auch viele gültige. die beispiele oben werden z.b. genau verkehrt ausgewertet: a und b werden abgelehnt, während c und d durchgehen.

    ich würde einfach nachfragen, welchen kompromiss man hier eingehen soll.

    "All through my life I've had this strange unaccountable feeling that something was going on in the world, something big, even sinister, and no one would tell me what it was."
    "No," said the old man, "that's just perfectly normal paranoia. Everyone in the Universe has that."

    😁😂😃😄😅😆😇😈😉😊😋😌😍😎😏😐😒😓😔😖😘😚😜😞😠😡😢😣😥😨😩😪😫😭😰😱😲😳😵😶😷

    Einmal editiert, zuletzt von sutupud (9. Dezember 2011 um 09:55)

  • wird eine prüfungsaufgabe und der prof ist nicht kooperativ. bin fernstudent für chemie u des is ein grundfach, nur hat er uns nichts beigebracht...wir sind die 1. und die wussten net was sie uns lehren sollen u das fiel ihm vor ein paar tagen ein u kommt mi in der prüfung...denke o hoffe mal, dass die kurze variante zutrifft...

  • muss ich vor den ausdruck noch das wort grep setzen?

    wenn du in der command line arbeitest, schon... es gibt viele verschiedene engines für regex, bekannt ist z.b. die integration in perl, aber auch in javascript - was viel verwendet wird...
    in javascript könntest du z.b. sowas machen:

    Code
    rx=/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i;
    /* 
        ist das selbe wie rx=RegExp("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$", "i");
        das "i" steht für ignorecase --> mailadressen sind case-insensitive
    */
    
    
    if (rx.test("validmail@example.com")) {
       alert("it's valid!");
    }


    oder in python:

    PHP
    import re
    if re.match("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$", "validmail@example.com", re.I):
        print "it's valid"

    oder eben für grep:

    Code
    $ echo "validmail@example.org" | grep -Ei "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$"
    [COLOR='#FF8C00']validmail@example.org[/COLOR]


    --> gibt als output jede übereinstimmende zeile aus.

    ohne das ^ bzw. $ am anfang und ende würde es reichen, wenn das pattern irgendwo im text vorkommt (ist übrigens bei der langen version von oben so)

    edit: gute referenz für javascript: http://de.selfhtml.org/javascript/objekte/regexp.htm

    "All through my life I've had this strange unaccountable feeling that something was going on in the world, something big, even sinister, and no one would tell me what it was."
    "No," said the old man, "that's just perfectly normal paranoia. Everyone in the Universe has that."

    😁😂😃😄😅😆😇😈😉😊😋😌😍😎😏😐😒😓😔😖😘😚😜😞😠😡😢😣😥😨😩😪😫😭😰😱😲😳😵😶😷

    4 Mal editiert, zuletzt von sutupud (13. Dezember 2011 um 19:54) aus folgendem Grund: php-tag nix gut für regex - schluckt \

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!