URL überprüfen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • URL überprüfen

    hiho,
    hat jemand eine Ahnung ob es in Cocoa einfach möglich ist, eine URL zu prüfen? Per Google hieß es überall nur, man solle NSURL's "URLWithString" verwenden und schauen ob das nil zurückgibt, das funktioniert bei mir aber absolut nicht, weil das teil nie nil zurückgibt, nichtmal für den String "a". Als nächstes habe ich versucht zu prüfen ob "host" und "scheme" der NSURL nil sind, das funktioniert aber auch nicht, da diese !=nil sind sobald ein Protokoll vornean steht, das würde also auch a parsen. Da ich - wenn das http:// fehlt - es programmatisch vornedran hänge (der benutzer soll es ja nicht zwangsweise eingeben müssen) - ist dies aber nicht akzeptabel.

    Im Klartext möchte ich URLs akzeptieren die vornedran ein Protokoll haben und hinten einen Ländercode, plus eventuelle Pfadangaben und sonstigen kram - eben alles was nach einer gültigen URL aussieht, also Dinge wie:
    google.com
    google.com
    google.de/somestuff/morestuff.jpg
    etc.

    Ideen? Reguläre ausdrücke wären natürlich der letzte Ausweg, darauf würde ich aber gerne verzichten. Die URL aufzurufen und zu schaun ob es sie gibt oder ähnliche Späße geht leider auch nicht, da die Methode zeitkritisch ist.
  • lass dir doch die scheme geben udn überprüfe es ob es eine für dich akzeptable ist. dann überprüfe noch den host ob der mindestens aus 3 oder 4 oder 5 (was weis ich) zeichen besteht und mindestens einen punkt enthällt, diesen aber nicht an erster und auch nicht an letzter stelle. irgendjeamnd hat das sicher schon gemacht und ist sicherlich im netz zu finden (vor allem weil dir die info ja sprachunabhängig reicht - nachprogrammieren kansnt du es dann auch mit obj-c).
  • hns schrieb:

    Warum willst Du gültige URLs (ohne Scheme oder ohne Host) verbieten?

    was wäre denn ne gültige URL ohne scheme und host?
    aber dazu: es ist nicht absolut wichtig das ich jede mögliche URL als "gültig" erkenne, aber die meisten ("handelsüblich") sollten es schon sein. das problem ist das ich mit dem NSString - falls es keine URL ist - dann anders verfahre, somit darf nichts als URL erkannt werden was KEINE URL ist.
  • BlackWolf schrieb:

    hns schrieb:

    Warum willst Du gültige URLs (ohne Scheme oder ohne Host) verbieten?

    was wäre denn ne gültige URL ohne scheme und host?
    aber dazu: es ist nicht absolut wichtig das ich jede mögliche URL als "gültig" erkenne, aber die meisten ("handelsüblich") sollten es schon sein. das problem ist das ich mit dem NSString - falls es keine URL ist - dann anders verfahre, somit darf nichts als URL erkannt werden was KEINE URL ist.


    und welche verschiedenen sachen werden getan?

    normal intressiert einem ja nur: ist es eine webseite (beginnt mit http oder mit www) oder nicht. ob dann da eine gültige domain oder gültige IP angegeben ist, das ist doch nicht dein problem oder?
  • gritsch schrieb:

    und welche verschiedenen sachen werden getan?

    normal intressiert einem ja nur: ist es eine webseite (beginnt mit http oder mit www) oder nicht. ob dann da eine gültige domain oder gültige IP angegeben ist, das ist doch nicht dein problem oder?

    absolut! ich fand den vorschlag, zu checken ob ein punkt drinnen ist und der nicht am anfang und ende steht auch sehr gut, werde das vermutlich so machen. Ich hätte nur irgendwie vermutet das NSURL irgendwas schlaueres hat um zu checken, ob eine URL gültig ist, aber dem scheint nicht so zu sein :D

    was ich mit meinem post ausdrücken wollte war eher: es soll eher zu wenig gematcht werden als zuviel. also URL wird nicht erkannt -> nicht so schlimm. nicht-URL wird als URL erkannt -> schlimm.
  • Du machst Dir Doch mehr Probleme als Du löst.

    Wenn Du unbedingt prüfen willst, ob das eine halbwegs valide URL ist, dann mach einfach ein DNS-Lookup auf den Hostname. Das kostet Dich (und den Nutzer) annähernd gar nichts.

    Du weisst Doch nicht, was Dein Nutzer für ein Set-up fährt.
    localhost <--- immer valide, und enthält keinen Punkt
    a <--- könnte lokal gültig sein!
    fd7s89.onion <--- gültig für TOR Nutzer...etc
    C++
  • Nach RFC1738 ist "a" keine gültige URL. Da muss immer mindestens ein Doppelpunkt drin sein. Das Problem ist, dass die meisten Leute das scheme eh weglassen und davon ausgehen, dass implizit http angenommen wird. Eine strikte Prüfung nach RFC1738 (oder RFC3986 - noch mehr Spaß!) ist also eigentlich unsinnig.

    Punkte zählen, TLDs suchen und derlei Späße sind eine tolle Idee. Abgesehen von den ganzen genannten Problembeispielen funktioniert das z.B. auch super bei IPv6-Adressen. Ja, die werden kommen. Und wer weiß nicht was sonst noch. Ich kenne elende Mengen von Programmen, die nicht mehr mit IPv6 funktionieren, weil sie davon ausgehen, dass in einer IP-Adresse Punkte sind.

    Soweit ich es sehe, hast Du drei Möglichkeiten: 1. Alles akzeptieren, was NSURL akzeptiert, 2. im Netz nachsehen, ob die URL auf etwas Gültiges verweist und 3. irgendwelche regex-Fummeleien.

    3. halte ich für die blödsinnigste Alternative, weil Du damit keinen Deut mehr Gewissheit als bei 1 hast. Dafür aber jede Menge Ärger.

    Wenn Du tatsächlich etwas mit den URLs anfangen willst, ist 2 der einzige gangbare Weg. Wie kann denn die Validierung einer Nutzereingabe derart zeitkritisch sein? Falls es sich um etwas anderes als eine Nutzereingabe handelt, würde ich mir auf konzeptioneller Ebene etwas anderes einfallen lassen.
    Multigrad - 360°-Produktfotografie für den Mac
  • Ist der Doppelpunkt nicht nur dann erforderlich, wenn es ein scheme und einen scheme-spezifischen Teil gibt?

    +++

    Habe es gerade noch einmal nachgeschaut: Offenkundig muss wirklich immer ein Doppelpunkt vorhanden sein, auch wenn es dort explizit nicht steht.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?