bestehen
Regex wird immer eine Annäherung für Dinge wie diese sein, und Regeln ändern sich im Laufe der Zeit. die oben regex wurde mit der folgenden in Verstand geschrieben und ist spezifisch für Host-Namen -
Host-Namen aus einer Reihe von Etiketten mit Punkten verketteten zusammengesetzt sind. Jedes Etikett ist 1 bis 63 Zeichen lang und enthält:
- die ASCII-Buchstaben A bis Z (in einem Fall insensitive Weise),
- die Ziffern 0-9,
- und den Bindestrich ('- ').
Zusätzlich:
- Etiketten können nicht mit Bindestrichen (RFC 952)
- Etiketten können mit Zahlen (RFC 1123)
- max Länge von ascii Hostnamen beginnen mit Punkten 253 Zeichen beginnen oder enden (ohne abschließenden Punkt) (http://blogs.msdn.com/b/oldnewthing/archive/2012/04/12/10292868.aspx)
- Unterstriche sind in Hostnamen nicht erlaubt (sind aber in anderen DNS-Typen zulässig)
einige Annahmen:
- TLD mindestens 2 Zeichen und nur az
- wir mindestens 1 Ebene über TLD wollen
Ergebnisse: gültig/ungültig
- 911.gov - gültig
- 911 - ungültig (keine TLD)
- a-.com - ungültig
- -a.com - ungültig
- a.com - gültig
- A.66 - ungültig
- my_host.com - ungültig (undescore)
- typisch -hostname33.whatever.co.uk - gültig
EDIT: John Rix eine alternative Hack des Regex zur Verfügung gestellt, um die Spezifikation eines TLD zu machen optional:
(?=^.{1,253}$)(^(((?!-)[a-zA-Z0-9-]{1,63}(?<!-))|((?!-)[a-zA-Z0-9-]{1,63}(?<!-)\.)+[a-zA-Z]{2,63})$)
- 911 - gültig
- 911.gov - gültig
EDIT 2: jemand für eine Version gefragt, die in js funktioniert. Der Grund, warum es in js nicht funktioniert, ist, weil js nicht Regex Look hinterher unterstützt. speziell der Code (?<!-)
- die angibt, dass das vorherige Zeichen kein Bindestrich sein kann.
wie auch immer, hier ist es ohne die Lookbehind neu geschrieben - ein wenig hässlicher, aber nicht viel
(?=^.{4,253}$)(^((?!-)[a-zA-Z0-9-]{0,62}[a-zA-Z0-9]\.)+[a-zA-Z]{2,63}$)
Sie ebenfalls einen ähnlichen Ersatz für John Rix-Version machen könnte.
EDIT 3: wenn Sie wollen Hinter Punkte ermöglichen - die technisch erlaubt ist:
(?=^.{4,253}$)(^((?!-)[a-zA-Z0-9-]{1,63}(?<!-)\.)+[a-zA-Z]{2,63}\.?$)
ich mit nachfolgendem Punkt-Syntax nicht vertraut war bis @ChaimKut sie wies darauf hin, und ich habe einige Nachforschungen
Die Verwendung von abschließenden Punkten scheint jedoch in den verschiedenen Werkzeugen, mit denen ich gespielt habe, etwas unvorhersehbare Ergebnisse zu verursachen, daher würde ich etwas Vorsicht walten lassen.
Nicht wirklich .. Zumindest wird es nicht zuverlässig sein. Sie können überprüfen, ob der TLD-Teil gültig ist, indem Sie eine Liste Ihrer eigenen TLDs führen (die auf dem neuesten Stand gehalten werden müssen), aber ansonsten haben Sie kein Glück :) – favoretti
Versuchen Sie es, es ist eine Regex : http://stackoverflow.com/questions/4912520/validate-fqdn-in-c-sharp – tombolinux
gut meine Idee war zu überprüfen, dass der Benutzer einen gültigen DNS-Namen zB groupa-zone1appserver.example.com wie eingegeben hat ein Standard. – Riaan