2009-08-20 10 views
1

In einer AIR-Anwendung lade ich eine Menge beliebigen Textes über JSON, lade es in ein Objekt und zeige es über einen benutzerdefinierten Renderer an. Ich möchte, dass URLs anklickbar sind. Ich bin mir sicher, dass dies über eine verrückte Regex-Sache möglich ist (wie ich für php here gefunden habe), aber da Flex flex ist, bin ich erstaunt, dass es dafür keine eingebaute Funktionalität gibt, die ich gerade nicht finde oder, falls dies nicht der Fall ist, eine Bibliothek, die jemand erstellt hat, um genau dies zu tun.as3 Flex make urls von Text anklickbar

(Ich bin genauso erstaunt, dass diese Frage hier zuvor gestellt worden ist. Ich mit dem Link zu, dass antizipieren wird geflammt)

Gelingt das nicht, dass jemand mit einigen verrückten regex helfen? ;>

Vielen Dank im Voraus!

Antwort

3

Sie können die URLs in Ihrem Text für tatsächliche Verbindungen ersetzen die folgende regex:

str = str.replace(/((https?|ftp|telnet|file):((\/\/)|(\\\\))+[\w\d:#@%\/;$()~_?\+-=\\\.&]*)/g, "<u><a href='$1'>$1</a></u>"); 

Dann stellen Sie die html auf eine Label oder Text Komponente und hört es ist link Event:

<mx:Text htmlText="{str}" link="linkHandler(event)"/> 

Öffnen Sie dann die URL des Handlers:

public function linkHandler(event:TextEvent):void { 
    navigateToURL(new URLRequest(event.text), '_blank'); 
} 

Außer dieser Regex habe ich diesen Code nicht getestet, aber es sollte funktionieren. Auch könnte this Ihnen eine Hilfe sein.

+0

Hey, danke. Ich habe dieses Projekt für eine Minute hingestellt, also bin ich nicht zu diesem Tab zurückgekehrt, um Ihnen rechtzeitig zu danken. Werde es versuchen und sehen, wie es geht. Danke für das Verständnis verrückten Regex für mich! –

+0

Das war eigentlich ein Problem, das ich auch in meinem Code hatte und ich reparierte es so, also kein Problem! :) – leolobato

2

Ich möchte hinzufügen, dass die folgenden RegEx viel nützlicher für die Validierung eine URL sein könnte:

/(((f|ht){1}tp:\/)[[email protected]:%_\+.~#?&\/=]+)/g

+0

Wunderbar. Können Sie erklären, was diese Regex gegenüber der anderen bevorzugt? (Ich fordere es nicht heraus, ich bin nur neugierig. =) Eine Sache, die ich nicht verstehe, ist, warum das {1} notwendig ist. Ist "one and only one match" nicht der Standard? – PEZ