检测字符串中的 URL,并仅使 URL 成为可点击的

Detecting URL in a string, and making only the URL, and nothing else in that string, clickable

(澄清一下,我已经阅读了本网站和其他网站甚至文档中的许多其他帖子,但我只是无法拼凑需要完成的工作..抱歉..正则表达式,事件等等东西只是我不太了解)

我是 AS3 的菜鸟,但我正在学习,基本上我有一个名为 "text" 的字符串,这很好,你在游戏中的聊天框中发送的任何文本,所以如果你在游戏中聊天并输入类似 "hey guys check out this at http://google.com" 的内容,整个字符串将是 "text" 变量,显然你的专业人士已经知道,但无论如何,仍然使用相同的消息作为示例,我想要基本上是添加一个检查以查看 "http" 是否涉及 "text",如果是,添加一个 EventListener?到那个而且只有 "word"(又名 URL)并将其交给 NavigateToURL?动作。

我可以给它 NavigateToURL 吗?我自己采取行动,老实说,它实际上只是检测字符串中是否包含 "http" 并剖析包含 http 的唯一单词以具有 EventListener?。我可以给全文事件监听器,但是他们在URL栏中加载"hey guys check out this at http://google.com"显然不专业。

我认为不需要任何代码就可以真正让你们知道我需要什么帮助,因为我给出了变量的名称和我需要做的事情,但是这里有一些代码如果有帮助的话(未修改) ,我删除了所有糟糕的编辑,以便您的专业人士可以应用您的有效编辑)

我从大多数其他 AS3 Clickable-URL 检测帖子了解到,需要正则表达式和诸如此类的东西,但我 100% 没问题,实际上只有 http 需要检测,如果 http 是不在聊天框中发送的 URL 中,它不会被点击,就这么简单,我不在乎人们是否键入 "httptroll" 并且它仍然有事件监听器。

这是 class 中唯一的函数,也是函数中调用的 ChatMessage class。

public static function make(
            name:String,
            text:String,
            objId:int = -1,
            numStars:int = -1,
            recipient:String = "",
            isToMe:Boolean = false,
            tokens:Object = null,
            isWhisper:Boolean = false,
            nameColor:int = 1193046,
            textColor:int = 1193046,
            isAdmin:Boolean = false):ChatMessage {
        var msg:ChatMessage = new ChatMessage();
        msg.name = name;
        msg.text = text;
        msg.objectId = objId;
        msg.numStars = numStars;
        msg.admin = isAdmin;
        msg.recipient = recipient;
        msg.isToMe = isToMe;
        msg.isWhisper = isWhisper;
        msg.tokens = tokens == null ? {} : tokens;
        msg.nameColor = nameColor;
        msg.textColor = textColor;
        return (msg);
    }


这取决于您如何设置聊天功能,但通常它包含两个主要元素:

一个单独的文本框,不同用户的所有消息都会转到另一个文本框,用户可以在其中输入一些文本(可能还有一个额外的按钮来实际发送消息)。

现在您可能没有意识到 Flash TextFields 能够呈现 HTML 格式的文本,因为它支持一些基本的 HTML 标签,例如 <font> <b> 和大多数重要的是 <a>.

在 HTML 中,起始 <a> 和结束 </a> 标记之间的某些内容(文本或图像)被标记为可点击的超级 link。它应该转到的 URL 由 href="" 属性决定。

因此,要返回您的聊天框,只需将字符串中出现的 link 替换为 html 格式的 hyperlink.

例如

This is my link https://www.startpage.com click it

进入

This is my link <a href="https://www.startpage.com">https://www.startpage.com</a> click it

并将结果设置为动态 TextField 的 .htmlText 属性。

这当然可以使用正则表达式来完成,但最直接的方法是在字符串中搜索 http 的出现,如果有的话,记住这个index 并从该位置开始搜索字符串中出现的 space(表示 url 的结尾)。

这是一个简单的例子:

    var messages:TextField = new TextField();
    messages.width = 400;
    messages.height = 200;
    messages.border = true;
    addChild(messages);

    var inputBox:TextField = new TextField();
    inputBox.type = TextFieldType.INPUT;
    inputBox.width = 400;
    inputBox.height = 20;
    inputBox.border = true;
    inputBox.y = 200;
    addChild(inputBox);
    inputBox.text = "This is my message https://www.startpage.com and some more text";
    messages.htmlText = containsLink(inputBox.text);
}

private function containsLink(inp:String):String
{
    var url:String = "";
    var start:int = inp.indexOf("http");
    var end:int;
    if (start != -1)
    {
        end = Math.min(inp.length, inp.indexOf(" ", start));
        url = inp.substring(start, end);
        inp = inp.replace(url, "<b><a href='" + url + "'>" + url + "</a></b>");
    }

    return inp;
}