Ich versuche, eine Regex für die Validierung von URLs zu erstellen. Ich weiß, dass es viele Fortgeschrittene gibt, aber ich möchte meine eigenen für Lernzwecke erstellen.Finde das letzte Vorkommen von Punkt mit Regex
Bisher habe ich eine Regex, die recht gut funktioniert, aber ich möchte die Validierung für den TLD-Teil der URI verbessern, weil ich denke, dass es noch nicht ganz da ist.
Hier ist mein regex (oder auf regexr finden):
/^[(http(s)?):\/\/(www\.)[email protected]:._\+~#=]{2,256}\.[a-zA-Z]{2,6}\b([/#?]{0,1}([A-Za-z0-9-._~:?#[\]@!$&''()*+,;=]|(%[A-Fa-f0-9]{2}))*)$/
Es funktioniert gut für Links wie foo.com
oder http://foo.com
oder foo.co.uk
Das Problem erscheint, wenn Sie Sub-Domains oder Second-Level-Domains einführen wie co.uk
, weil der Regex foo.co.u
oder foo.co.
akzeptiert.
Ich habe versucht die folgenden mit der Teilkette nach dem letzten .
auszuwählen:
/[(http(s)?):\/\/(www\.)[email protected]:._\+~#=]{2,256}[^.]{2,}$/
aber das hindert mich daran, die Definition der path
Regeln der URI.
Wie kann ich sicherstellen, dass der Teil nach den letzten .
aber vor den ersten /
, ?
oder #
mindestens 2 Zeichen lang ist?
Wenn Sie lernen wollen, warum fragen Sie uns? Nimm einen der Fortgeschrittenen und analysiere ihn. ;) – ClasG
Wie wäre es nur mit '\. \ W {2,} $'? Es wird überprüft, ob es nach dem letzten '.' mit mindestens 2 Zeichen endet. – ClasG
@ClasG Die fortgeschrittenen sind Tausende von Zeichen lang. :) Ihre Regex funktioniert nicht ganz, wenn Sie einen Pfad in der URL haben (z. B. 'foo.co.uk/test? Id = 1') – Chris