Ich benutze Python und möchte eine einfache API oder Regex, um die Gültigkeit eines Domainnamens zu überprüfen. Durch die Gültigkeit bin ich syntaktisch gültig und nicht, ob der Domainname tatsächlich im Internet existiert oder nicht.Suchen Sie nach einem gültigen Domänennamen in einer Zeichenfolge?
Antwort
Jeder Domänenname ist (syntaktisch) gültig, wenn es sich um eine durch Punkte getrennte Liste von Bezeichnern handelt, die nicht länger als 63 Zeichen sind und aus Buchstaben, Ziffern und Bindestrichen (keine Unterstriche) bestehen.
So:
r'[a-zA-Z\d-]{,63}(\.[a-zA-Z\d-]{,63})*'
wäre ein Anfang. Natürlich können heutzutage einige nicht-ASCII-Zeichen erlaubt sein (eine sehr neue Entwicklung), die die Parameter sehr verändern - müssen Sie damit umgehen?
kann eine Kennung mit einem Bindestrich beginnen/enden? – Amarghosh
Danke! Nein, ich brauche keine grundlegende Überprüfung, um sicherzustellen, dass keine schwarzen Listen wie "! "usw. – demos
Alex, ich weiß, dass du ein appengine Guru bist, bitte hilf mir dabei: http: // stackoverflow.com/questions/2894808/Erstellen-Auto-Inkrementieren-Spalte-in-Google-Appengine Vielen Dank im Voraus! – demos
r'^(?=.{4,255}$)([a-zA-Z0-9][a-zA-Z0-9-]{,61}[a-zA-Z0-9]\.)+[a-zA-Z0-9]{2,5}$'
- Lookahead stellt sicher, dass es ein Minimum von 4 (
a.in
) und maximal 255 Zeichen - einer oder mehr Markierungen (die durch Punkte getrennt) hat mit einer Länge zwischen 1 bis 63, und endend mit alphanumerischen Zeichen und mit alphanumerischen Zeichen und Bindestrichen in der Mitte.
- durch einen Top-Level-Domain-Namen Gefolgt (deren maximale Länge beträgt 5 für Museum)
Dies kann keinen Punycode speichern Die kürzeste kyrillisch geschriebene Zwei-Buchstaben-Top-Level-Domain besteht aus 6 Buchstaben in Punycode. – kaleissin
Museum ist 6 Zeichen, nicht 5. –
Es ist eine schlechte Idee, die erwartete TLD-Länge hart-Code, vor allem jetzt, dass IDN TLDs kommen, die codiert sind und somit viel länger als 5 kommen. –
Beachten Sie, dass, während Sie etwas mit regulären Ausdrücken tun, der zuverlässigste Weg für gültigen Domain-Namen zu testen ist zu versuchen, tatsächlich den Namen (mit socket.getaddrinfo) zu lösen:
from socket import getaddrinfo
result = getaddrinfo("www.google.com", None)
print result[0][4]
Beachten Sie, dass dies technisch Sie offen für DoS verlassen kann (wenn jemand tausende von ungültigen Domain-Namen trägt, kann es eine Weile dauern, ungültig nam zu lösen es) aber Sie könnten einfach jemanden einschränken, der das versucht.
Der Vorteil davon ist, dass es "hotmail.con" als ungültig (anstelle von "hotmail.com" sagen wird), während eine Regex sagen würde "hotmail.con" ist gültig.
Dies ist wirklich ein separates Problem und keine gute Antwort auf die Frage. Angesichts der Tatsache, dass DNS für Exploits in der Vergangenheit verwendet wurde, ist es nur sinnvoll, zu überprüfen, ob eine Zeichenfolge mindestens gültig gültig ist, bevor sie verwendet wird. Außerdem ist sie um Größenordnungen schneller als eine DNS-Suche. Das ähnelt dem Ausführen von Code, um zu sehen, ob es bösartig ist! – Synchro
Dies kann nicht für die Validierung von Domänennamen verwendet werden, die erstellt werden sollen, nur für bereits existierende Domänennamen. – nerdoc
Warum gibt eine gültige URL wie https: // google.com/'einen Fehler zurück? –
Ich habe das schon mit:
(r'(\.|\/)(([A-Za-z\d]+|[A-Za-z\d][-])+[A-Za-z\d]+){1,63}\.([A-Za-z]{2,3}\.[A-Za-z]{2}|[A-Za-z]{2,6})')
, um sicherzustellen, folgt sie entweder nach Punkt (www.) Oder/(http: //) und der Bindestrich nur innerhalb der Name kommt und solche Suffixe übereinstimmen wie gov.uk auch.
Die Antworten sind alle ziemlich veraltet mit der Spezifikation an dieser Stelle. Ich glaube, das folgende wird die aktuelle Spezifikation korrekt entsprechen:
r'^(?=.{1,253}$)(?!.*\.\..*)(?!\..*)([a-zA-Z0-9-]{,63}\.){,127}[a-zA-Z0-9-]{1,63}$'
- 1. Nach einem gültigen Datum suchen
- 2. Suchen Sie nach gültigen Link (URL)
- 3. So suchen Sie nach einer Zeichenfolge in einem Array
- 4. Suchen Sie nach gültigen Benutzereingabestring und lesen Sie die Zeichenfolge mit Leerzeichen mit Scanner in Java
- 5. So suchen Sie in JAR-Dateien nach einer Zeichenfolge
- 6. beste Möglichkeit, nach einer Zeichenfolge in einem Array zu suchen
- 7. Suchen einer Zeichenfolge in einer Zeichenfolge
- 8. So suchen Sie nach einer bestimmten Zeichenfolge im Zellenfeld
- 9. Rückwärts Suchen in einer Zeichenfolge
- 10. Suchen Sie nach einem Verzeichnis in C#
- 11. Nach einem gültigen Pfad beim Hochladen einer Datei suchen Mit commons-fileupload
- 12. Suchen Sie eine Zeichenfolge mit Klammern in einer anderen Zeichenfolge
- 13. Verwenden von VBA zum Suchen nach einer Zeichenfolge in Excel
- 14. Java - Optimieren Sie das Suchen einer Zeichenfolge in einer Liste
- 15. Suchen nach Muster in einer Zeichenfolge in VBA
- 16. suchen Sie eine Zeichenfolge in der Protokolldatei und suchen Sie eine andere Zeichenfolge nach der ersten Zeichenfolge
- 17. Suchen nach einer Zeichenfolge in den Docker-Protokollen des Containers
- 18. Suchen nach einem String in einem Array
- 19. Suchen Sie nach einer bestimmten Zeichenfolge in einer anderen und zählen Sie, wie oft es erscheint
- 20. Suchen Sie ein Array nach einer bestimmten Zeichenfolge und geben Sie eine zugehörige Zeichenfolge zurück
- 21. Möglichkeit, ganze Datenbank nach einer Zeichenfolge in MySQL zu suchen
- 22. Suchen nach einer Zeichenfolge für $ location change in Angularjs
- 23. Wie kann ich nach einer leeren Zeichenfolge in MyBatis suchen?
- 24. effiziente Möglichkeit zum Suchen nach einer Zeichenfolge in einem großen Textdokument in Javascript
- 25. C#/WPF: Suchen Sie nach einem Dateidialog
- 26. Suchen Sie nach einem C# TDD Framework?
- 27. Regex, um in Visual Studio nach einem Wort in einer Zeichenfolge zu suchen
- 28. Speichern Sie eine Zeichenfolge [] mit SharedPreferences, und suchen Sie nach jeder Zeichenfolge in DynamoDB
- 29. Nach einer Nullreferenz suchen?
- 30. Suchen Sie nach einem MVVM-Beispiel
Aus welchem Grund? Wenn es sich um eine E-Mail handelt, sollte die tatsächliche Gültigkeit überprüft werden, indem eine DNS-Abfrage für den MX-Eintrag durchgeführt wird, nicht durch regexp. – Kimvais
Nein. Es gibt keinen Vorteil beim Suchen nach bekannten ungültigen Namen, es ist nur eine Verschwendung von Zeit und Ressourcen. Außerdem benötigen Sie keinen MX-Record, um E-Mails zuzustellen, ein A-Record ist ausreichend. – Synchro
Scheint es bereits diskutiert [HIER] (http://stackoverflow.com/questions/1128168/validation-for-url-domain-using-regex-rails). – Incognito