Regex
maybee
- programmiertechnik
0 Gunnar Bittersmann0 mark0 Gunnar Bittersmann0 Der Martin0 MudGuard0 mark
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!
@@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'
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
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:
lg
@@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'
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
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
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}