maybee: Regex

Hallo zusammen,

ich brauche eine Regex die auf folgende Ausdrücke anspringt:

myname@example.com oder @example.com

Also in dem Fall soll eine Emailadresse "myname@example.com" überprüft werden, es soll aber auch ein Wildcard Eintrag in der Form "@example.com" gültig sein also ohne * oder ähnliches. Alles andere was diesen Regeln nicht entspricht soll durchfallen.

Kann mir da jemand weiterhelfen?

Grüße & Danke!

  1. @@maybee:

    nuqneH

    ich brauche eine Regex die auf folgende Ausdrücke anspringt:

    myname@example.com oder @example.com

    Ich brauche soll heißen: macht ihr mal für mich?

    Also in dem Fall soll eine Emailadresse "myname@example.com" überprüft werden, es soll aber auch ein Wildcard Eintrag in der Form "@example.com" gültig sein also ohne * oder ähnliches. Alles andere was diesen Regeln nicht entspricht soll durchfallen.

    Du willst also prüfen, ob '@' gefolgt von mindestens einem Zeichen (außer '@') im String vorkommt.

    Oder '@' gefolgt von mindestens einem Zeichen gefolgt von '.' gefolgt von mindestens 2 Zeichen.

    Wo genau ist dein Problem dabei?

    Qapla'

    --
    „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
    1. Hallo,

      Also in dem Fall soll eine Emailadresse "myname@example.com" überprüft werden, es soll aber auch ein Wildcard Eintrag in der Form "@example.com" gültig sein also ohne * oder ähnliches. Alles andere was diesen Regeln nicht entspricht soll durchfallen.

      Du willst also prüfen, ob '@' gefolgt von mindestens einem Zeichen (außer '@') im String vorkommt.

      Oder '@' gefolgt von mindestens einem Zeichen gefolgt von '.' gefolgt von mindestens 2 Zeichen.

      Für mich klingts als ob der der String auf '@example.com' enden soll...

      Gruß
      Kalk

  2. Kommt drauf an, für was du das dann verwenden möchtest. Folgendes regex ist _nicht_ passgenau.

    @[^ \r\n]*\.[^ \r\n]{2,63}

    Du kannst das selbst vervollständigen, indem du die [] Klammern mit Zeichen auffüllst, die ebenfalls ausgeschlossen werden sollen.

    Erklärung:

    • Erkenne das Zeichen @ gefolgt von
    • * unendlich vielen Zeichen
    • ^ die nicht SPACE, oder LF, oder, CR sind
    • Erkenne .
    • gefolgt von minimal 2 bis maximal 63 Zeichen die
    • ^ die nicht SPACE, oder LF, oder, CR sind

    lg

    1. @@mark:

      nuqneH

      @[^ \r\n]*\.[^ \r\n]{2,63}

      Vor dem Punkt soll noch ein anderes Zeichen stehen, also + statt *

      Du kannst das selbst vervollständigen, indem du die [] Klammern mit Zeichen auffüllst, die ebenfalls ausgeschlossen werden sollen.

      Wo du schon Whitespace aufführst: \t

      • gefolgt von minimal 2 bis maximal 63 Zeichen die

      Ist das in Stein gemeißelt, dass eine TLD nicht länger sein kann?

      Qapla'

      --
      „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
      1. Hallo,

        Ist das in Stein gemeißelt, dass eine TLD nicht länger sein kann?

        ich weiß gerade aus dem Stegreif nicht mehr, wo das steht, aber es gibt eine generelle Festlegung für Domainnamen, dass kein Teil eines Namens im DNS länger als 63 Zeichen sein darf. Das würde dann auch für die TLD gelten.

        Ja, betrachten wir das mal als in Stein gemeißelt. Und Erosion braucht Zeit.

        Ciao,
         Martin

        --
        F: Was macht ein Offizier, der in der Nase bohrt?
        A: Er holt das Letzte aus sich heraus.
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
      2. Hi,

        @[^ \r\n]*\.[^ \r\n]{2,63}

        • gefolgt von minimal 2 bis maximal 63 Zeichen die
          Ist das in Stein gemeißelt, dass eine TLD nicht länger sein kann?

        Die 63 für jeden Einzelteil (nicht nur die TLD) steht auch so auf der Wiki-Seite zu hostname. Dort steht auch die zusätzliche Einschränkung, daß der Gesamt-Name nicht länger als 255 Zeichen sein darf.

        Und dort ist auch die zuständige RFC verlinkt.

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
      3. Vor dem Punkt soll noch ein anderes Zeichen stehen, also + statt *
        Wo du schon Whitespace aufführst: \t

        Stimmt. Danke dafür, vor allem für + statt *

        Ist das in Stein gemeißelt, dass eine TLD nicht länger sein kann?

        Da bin ich nicht vollkommen sicher, aber:

        Weil's mich interessiert hat hab ich selbst nachgeforscht und bin über Wikipedia E-Mail->Länge fündig geworden.

        Dort ist RFC5321 (2008) (SMTP Simple Mail Transfer Protocol) verlinkt in dem es unter Abschnitt 4.5.3.1.1. heißt:

        Local-part
          The maximum total length of a user name or other local-part is 64
          octets.

        Ein Octet hab ich als ein Byte (=8bit) verstanden. Das wird im RFC5321 in den Absätzen zuvor so beschrieben. Also 64 Zeichen in US-ASCII, für andere Codierungen braucht ein Zeichen u.U. mehr Bit.

        Und schließlich bin ich, wie MudGuard indirekt bereits verlinkt hat auf RFC 1034 (1987 !) gestoßen, wo unter Abschnitt 3.1 steht:

        Each node has a label, which is zero to 63 octets in length.  Brother
        nodes may not have the same label, although the same label can be used
        for nodes which are not brothers.  One label is reserved, and that is
        the null (i.e., zero length) label used for the root.

        Es sind also mehrere Spezifikationen die man berücksichtigen muss. Allerdings bin ich wahrlich kein Experte auf dem Gebiet.

        Theoretisch wären meines Wissens auch TLDs möglich, die nur aus einem einzigen Zeichen bestehen.

        Ein anderer intressanter Ansatz um maximale und minimale Länge einer TLD zu bestimmen könnte so aussehen, dass man sich die Liste aller verfügbaren TLDs bei der IANA holt und diese dann vermisst.

        Zur Zeit ist dies XN--CLCHC0EA0B2G2A9GCD mit 22 Zeichen. Das ist natürlich auch nicht auf meinem Mist gewachsen, sondern das hab ich wiederum von Dan Dascalescu.

        Also korrigiert:
        @[^ \r\n\t]+\.[^ \r\n\t]{2,22}