frank69
Goto Top

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:
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 face-smile

Content-ID: 164113

Url: https://administrator.de/contentid/164113

Ausgedruckt am: 25.11.2024 um 12:11 Uhr

Arano
Arano 07.04.2011 um 16:25:18 Uhr
Goto Top
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
frank69
frank69 07.04.2011 um 17:42:28 Uhr
Goto Top
Hi Arano,
die bisherige Lösung funktioniert auch mit angehängtem Parameter. Der Benutzer hat die möglichkeit mehrere URL belieibiger Art in einen String hintereinander zu schreiben. Das soll auch so bleiben.
Das Ärgerliche an meiner jetztigen Lösung ist halt das https nicht berücksichtigt wird.

Viele Grüße

Frank69
Arano
Arano 07.04.2011 um 19:07:18 Uhr
Goto Top
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
frank69
frank69 08.04.2011 um 21:44:08 Uhr
Goto Top
Hi,

also ich mache das bisher mit 2 Javasript replace Befehlen.
Das in mehreren Schritten programmtechnisch zu lösen ist nicht das Problem
Also das ist eigentlich meine Frage, ob ich mit einem regex Befehl alles lösen kann. Es ist einfach eine Herrausvorderung. Mich würde interessieren, ob es überhautp möglich ist, oder ob das so eine Grenzsache ist. Und wenn es ein Lösung gibt, dann würde ich diese gerne sehen face-smile
Also man müsste im dem String die einzelnen URLs erkennen und bei jeder erkennen, ob diese http bzw. https vorgestellt hat und wenn nicht dann dieser http hinzufügen und jeder dieser Urls zusätzlich noch den Rahmen hinzufügen, so dass diese anklickbar sind.

Grüße

Frank69
Arano
Arano 08.04.2011 um 22:14:11 Uhr
Goto Top
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:
(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
frank69
frank69 08.04.2011 um 22:39:09 Uhr
Goto Top
Hi, urls sind doch immer nach dem selben Schema aufgebaut.

Grüße

Frank69
Arano
Arano 08.04.2011 um 22:52:39 Uhr
Goto Top
Ich weiss doch auch nicht alles...
Wie machst du das ?
EinTyp
EinTyp 17.04.2011 um 11:59:40 Uhr
Goto Top
Hallo frank69,

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-