检测字符串中的URL,仅使URL生效,而使该字符串中的其他内容均不可点击

问题描述 投票:0回答:1

((为澄清起见,我已经阅读了SOOOO的该网站以及其他网站的许多其他帖子,甚至是文档,我只是无法拼凑需要做的事情。。我不是很了解)

我是AS3的菜鸟,但我正在学习,基本上我有一个名为“ text”的字符串,它是您在游戏中的聊天框中发送的任何内容的文本,因此,如果您在游戏中聊天并输入类似“嘿家伙们,请在http://google.com处检查”,整个字符串就是“ text”变量,显然您已经知道,但是无论如何,仍然使用相同的消息作为示例,我基本上希望添加检查以查看“文本”中是否包含“ http”,如果是,则添加EventListener?到那个唯一的“单词”(又称URL)并将其提供给NavigateToURL?动作。

我可以给它NavigateToURL吗?坦白地说,我自己要采取行动,实际上是在检测字符串中是否包含“ http”,并解析该字符串中唯一包含http的单词是否具有EventListener?我可以为整个事件提供事件侦听器,但是他们在URL栏中加载“嗨,伙计们,请在http://google.com处检查一下”显然是不专业的。

我认为不需要任何代码就能真正让你们知道我需要帮助的原因,因为我给出了变量的名称以及我需要完成的工作,但是如果有帮助,这里有一些代码(非接触式,我已删除了我所有的拙劣修改,以便您的专业人员可以应用有效的修改)

我从其他大多数AS3 Clickable-URL检测帖子,正则表达式和其他内容中了解到,但是我100%可以,实际上,如果发送的URL中没有http,则只需要检测http。聊天框,它将不会被单击,就这么简单,我不在乎人们是否键入“ httptroll”,它仍然具有事件侦听器。

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

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);
    }


actionscript-3
1个回答
0
投票

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

[一个文本框,不同用户的所有消息都转到该文本框,另一个文本框,用户可以在其中输入一些文本(可能还有一个实际发送消息的附加按钮)。

现在您可能不知道,但是Flash TextFields能够呈现HTML格式的文本,因为它支持一些基本的HTML标签,例如<font> <b>,最重要的是<a>

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

因此,返回到您的聊天框,只需用html格式的超链接替换出现在字符串中的链接。

例如

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的出现,如果有,请记住该索引并从该位置开始搜索字符串出现空格(表示网址的末尾)。

这是一个简单的示例:

    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;
}
© www.soinside.com 2019 - 2024. All rights reserved.