检测字符串中的 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;
}
(澄清一下,我已经阅读了本网站和其他网站甚至文档中的许多其他帖子,但我只是无法拼凑需要完成的工作..抱歉..正则表达式,事件等等东西只是我不太了解)
我是 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;
}