Mit Regex eine klick bare URL erstellen ( harte Nuss)
Hallo ich hab hier eine harte Nuss zum Knacken, vielleicht hat ja jemand eine Idee.
Ich möchte einen String, der mehrere Urls enthalten kann mit einem Regex-Befehl so wandeln, dass alle URLs in diesem String anklickbare Links werden.
Es gibt folgende Bedingungen. Wenn die URL https:oder http: bereits enthält, dann soll dies beibehalten werden.
Enthält die URL kein http:oder https: so soll http:hinzugefügt werden.
Beispiele:
Meine Lösung sieht bisher so aus, das ich in einem Schritt einfach alle http: und https: aus den Urls in dem String entferne und im 2ten Schritt einfach zu jeder URL http: + Rahmen hinzufüge.
Das ist aber nicht so günstig, wenn eine ursprungs Url mit https:// startet.
Würde mich interessieren, ob das mit einem replace Befehl möglich ist.
Viel Spass beim Grübeln
Ich möchte einen String, der mehrere Urls enthalten kann mit einem Regex-Befehl so wandeln, dass alle URLs in diesem String anklickbare Links werden.
Es gibt folgende Bedingungen. Wenn die URL https:oder http: bereits enthält, dann soll dies beibehalten werden.
Enthält die URL kein http:oder https: so soll http:hinzugefügt werden.
Beispiele:
test.de wird zu <a href="http://test.de" >http://test.de</a/>
http://test.de wird zu <a href="http://test.de" >http://test.de</a>
https://test.de wird zu <a href="https://test.de" >https://test.de</a>
Meine Lösung sieht bisher so aus, das ich in einem Schritt einfach alle http: und https: aus den Urls in dem String entferne und im 2ten Schritt einfach zu jeder URL http: + Rahmen hinzufüge.
Das ist aber nicht so günstig, wenn eine ursprungs Url mit https:// startet.
Würde mich interessieren, ob das mit einem replace Befehl möglich ist.
Viel Spass beim Grübeln
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 164113
Url: https://administrator.de/contentid/164113
Ausgedruckt am: 25.11.2024 um 12:11 Uhr
8 Kommentare
Neuester Kommentar
Hi
Ich würde einfach nur die URL "akzeptieren" die mit "http" anfangen.
Das würde den regulären Ausdruck auch vereinfachen weil du die Suche einfach auf von "http" bis ".tld " beschränken kannst (was das HTTPS-Schema natürlich beinhaltet weil es auch mit "http" anfängt).
Sofern du nur nach der Domain an sich suchen möchtest, ohne Unterverzeichnisse, ohne Dateinamen, ohne angehängten Parametern und ohne Dokumentenankern
Viel Spaß beim Grübeln ;)
~Arano
Ich würde einfach nur die URL "akzeptieren" die mit "http" anfangen.
Das würde den regulären Ausdruck auch vereinfachen weil du die Suche einfach auf von "http" bis ".tld " beschränken kannst (was das HTTPS-Schema natürlich beinhaltet weil es auch mit "http" anfängt).
Sofern du nur nach der Domain an sich suchen möchtest, ohne Unterverzeichnisse, ohne Dateinamen, ohne angehängten Parametern und ohne Dokumentenankern
Viel Spaß beim Grübeln ;)
~Arano
Hi,
achso, wusst ich ja nicht.
Und was spricht dagegen deinen jetzigen 2 Schritten: http(s) entfernen und http-links erstellen.
in diese zu ändern: Alle http zu links wandeln und alle https zu links wandeln.
Wie machst du das überhaupt ?
Mit regulären Ausdrücken ?
Dann könnte man eventuell das URL-Schema noch einmal kapseln so das es als Wert zur Verfügung steht und dann in dem Link verwendet zu werden.
~Arano
achso, wusst ich ja nicht.
Und was spricht dagegen deinen jetzigen 2 Schritten: http(s) entfernen und http-links erstellen.
in diese zu ändern: Alle http zu links wandeln und alle https zu links wandeln.
Wie machst du das überhaupt ?
Mit regulären Ausdrücken ?
Dann könnte man eventuell das URL-Schema noch einmal kapseln so das es als Wert zur Verfügung steht und dann in dem Link verwendet zu werden.
~Arano
Hi,
nein hierfür würde ich auch reguläre Ausdrücke verwenden - eben wegen der mehrfachen Bedingungen.
Das mit dem "http" und "https" sollte kein Problem sein:
Mit dieser Kapselung sollte nur "http" oder "https" gefunden werden können.
Rahmen = HTML !
~Arano
nein hierfür würde ich auch reguläre Ausdrücke verwenden - eben wegen der mehrfachen Bedingungen.
Das mit dem "http" und "https" sollte kein Problem sein:
(https?)
Mit dieser Kapselung sollte nur "http" oder "https" gefunden werden können.
Also man müsste im dem String die einzelnen URLs erkennen...
Das ist doch der Punk, wie bzw. __woran__ erkennst du denn eine URL wenn sie nicht mit "http(s)" anfängt ?Rahmen = HTML !
~Arano
Hallo frank69,
Ich schreib dir mal ein Code (keine Garantie auf Richtigkeit):
Hoffe, dass ich alles richtig gemacht habe (Auch ohne replace-Befehl).
-eintyp-
Ich schreib dir mal ein Code (keine Garantie auf Richtigkeit):
<html>
<head>
<script>
arr = new Array(); //Enthält die URLs
arr = "http://test.de";
arr[1] = "https://test.de";
arr[2] = "test.de";
fertig = new Array(); //Enthält die bearbeiteten URLs mit den <a>-Tag
function makeURL(url) {
ende = new Array();
for (i=0;i<url.length;i++) {
if (url[i].match(/^http:/gi) || url[i].match(/^https:/gi)) {
ende[i] = "<a href=\""+url[i]+"\">URL No."+(i+1)+"</a>";
continue;
}
if (!url[i].match(/^http:/gi)) {
ende[i] = "<a href=\"http://"+url[i]+"\">URL No."+(i+1)+"</a>";
continue;
} else {
ende[i] = "Fehler";
continue;
}
}
return ende;
}
fertig = makeURL(arr);
</script>
</head>
<body>
<script>
for (a=0;a<fertig.length;a++) document.write(fertig[a]+"<br>");
</script>
</body>
</html>
Hoffe, dass ich alles richtig gemacht habe (Auch ohne replace-Befehl).
-eintyp-