Обнаружение URL в строке и создание только URL, и ничего больше в этой строке, кликабельным - PullRequest
1 голос
/ 27 января 2020

(Просто чтобы уточнить, я прочитал SOOOO много других постов с этого сайта и других сайтов и даже документацию, я просто не мог собрать воедино то, что нужно сделать ... извините ... регулярное выражение, события и все эти вещи просто не то, что я знаю слишком много)

Я новичок в AS3, но я нахожусь в процессе изучения, в основном у меня есть строка с именем "текст", которая хорошо, текст того, что вы отправляете в окно чата в игре, так что если вы общаетесь в игре и набираете что-то вроде «Эй, ребята, посмотрите на http://google.com», эта строка будет переменной «текст», очевидно, вы профессионалы уже знают это, но в любом случае, все еще используя это же сообщение в качестве примера, я хочу в основном добавить проверку, чтобы увидеть, присутствует ли «http» в «тексте», и если да, добавить EventListener? к этому единственному «слову» (он же URL) и передать его NavigateToURL? действие.

Я могу дать ему NavigateToURL? Действуй сам, если честно, это действительно просто обнаружение, есть ли в строке «http», и чтобы он разбирал это единственное слово, содержащее http, чтобы иметь EventListener ?. Я могу дать весь текст слушателю событий, но их загрузка "эй, ребята, проверьте это в http://google.com" в строке URL явно не профессиональна.

Я не думаю, любой код необходим, чтобы действительно дать вам понять, что мне нужно, так как я дал имя переменным и что мне нужно сделать, но вот некоторый код, если он помогает (не тронут, я стер все мои неудачные правки, чтобы вы профессионалы могут применить ваши эффективные изменения)

Я понимаю, что по большинству других сообщений AS3 об обнаружении кликабельных URL-адресов требуются регулярные выражения и еще много чего, но я в порядке на 100% и на самом деле достаточно ТОЛЬКО http, который нужно обнаружить Если http не указан в URL-адресе, отправляемом в окне чата, он не будет активным, просто так, мне все равно, если люди наберут «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);
    }


1 Ответ

1 голос
/ 27 января 2020

Это зависит от того, как вы настроили эту функцию чата, но обычно она состоит из двух основных элементов:

Одно текстовое поле, где все сообщения от разных пользователей go и другое текстовое поле, где пользователь может введите некоторый текст (и, возможно, дополнительную кнопку для фактической отправки сообщения).

Теперь вы можете не знать об этом, но Fla sh TextFields могут отображать форматированный HTML текст, так как он поддерживает некоторые основные c HTML тегов, таких как <font> <b> и, самое главное, <a>.

В HTML что-то (текст или изображение) между открытием <a> и закрытием * Тег 1011 * помечен как активная гиперссылка. URL-адрес, на который он должен go, определяется атрибутом 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

и присвойте результат .htmlText свойству Dynami c. TextField.

Конечно, это можно сделать с помощью регулярных выражений, но самый простой подход - это поиск строки по вхождению http , и, если он есть, запомните этот индекс и начиная с этой позиции ищите в строке вхождение пробела (который обозначает конец 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...