Парсинг линков в стринге.
Запись от 3p.station размещена 03.08.2011 в 21:40
Тема супер простая, однако пришлось потратить часов 5 пока не пришел к более-менее нормальному результату.
Следующий код парсит и заменяет человеческие линки на html-линки.
private function replaceLinks(str:String):String { var string:String = str; var regLinksHTTP:RegExp = /(ftp:\/\/|http:\/\/|https:\/\/)([\.[:alnum:]_-]){0,4}([[:alnum:]_-]+\.)([[:alnum:]_-]\.?)([[:alpha:]]){0,3}+[\S]*(?<![^\w\/])/g; var regLinksWWW:RegExp = /[^\/](www)([\.[:alnum:]_-]){0,4}([[:alnum:]_-]+\.)([[:alnum:]_-]\.?)([[:alpha:]]){0,3}+[\S]*(?<![^\w\/])/g; var regEmail:RegExp = /[a-z0-9!#$%&'*+\/\=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/g; string = string.replace(regLinksHTTP, "<a href='$&' target='blank'>$&</a>"); string = string.replace(regLinksWWW, "<a href='http://$&' target='blank'>$&</a>"); string = string.replace(regEmail, "<a href='mailto:$&'>$&</a>"); return string; }
Всего комментариев 17
Комментарии
03.08.2011 22:07 | |
Особо не вникал, но разве там в Community не нашлось подходящего варианта?
|
03.08.2011 23:22 | |
да, там есть различные паттерны и их много, но не один меня не удовлетворил полностью ( :
|
03.08.2011 23:30 | |
Обновил(-а) Elff 03.08.2011 в 23:48
|
03.08.2011 23:40 | |
Вы, меня извените, но зачем это надо?
|
04.08.2011 00:38 | |
Elff, попробуйте обработать вашим методом например строку "www.google.com" и флеш перейдет на локальный адрес www, которого нет. или попробуйте передать такую стрингу " привет! перейди по этой ссылке www.google.com"
t4arty, например для текстового чата. мой вариант обрабатывает также когда в конце ссылки может стоять точка или запятая, но если чтоит точка или запятая в самой ссылке, то проблем нет : "привет! зайди на мой сайт www.google.com. или на www.google.com/somestring.somestring" |
04.08.2011 03:50 | |
Я вот тоже не понимаю где вообще это может пригодится? В жизни ни разу не встречал хоть и сделал оч много проектов разных типов
|
04.08.2011 04:00 | |
я же написал - текстовый чат.
|
04.08.2011 09:13 | |
Зашибись регулярка. Возьму на заметку.
|
04.08.2011 09:52 | |
Подскажите, что такое "человеческий линк".
|
04.08.2011 11:01 | |
Спасибо, пригодится.
|
04.08.2011 22:23 | |
dimarik, думаю можно на ты
наврено не совсем подходящее выражение. Имелось ввиду ссылка введеная человеком без обрамления тегом <a>, например http://www.google.com или www.flasher.ru. Вот в послденем примере точка не должна попасть в тег <a>. а в этом случае: www.flasher.ru/somestring.somestrin точка принимается как часть урла. также "ловим" если юзер ввел эмейл. Общее применение - подключаем css к текстовому полю и имеем все ссылки в кликабельном html виде. |
05.08.2011 00:05 | |
прикольно, еще бы добавить валидацию киррилических доменов)
а то пока нигде не работает) домен.рф |
05.08.2011 00:07 | |
и кроме ftp:\/\/|http:\/\/|https: есть еще svn, git, ssh,rtmp итп протоколы, хотя они довольно специфичные и вряд ли нужны.
Кроме того ссылка domen.smth не должна прокатить - надо делать валидацию по доменам первого уровня) А просто domen.com не пройдёт как ссылка - без www |
|
Обновил(-а) Котяра 05.08.2011 в 00:10
|
05.08.2011 00:50 | |
да, можно опционально добавить еще разные префиксы. по поводу domen.smth - вот тут то и сложность. тоесть добавлять тогда уже и .рф придется.
|
05.08.2011 01:18 | |
3p.station, извините за глупую шутку, был нетрезв (
|
05.08.2011 01:51 | |
аа, теперь понятненько нормас. я сначала так и подумал, но решил подстраховаться
|
05.08.2011 22:49 | |
3p.station, про точку после адреса спорно. Любой адрес должен быть введен с точкой в конце: www.flasher.ru.
Это домен нулевого уровня. Просто для удобства пользователей все браузеры позволяют вводить эту точку опционально. in4core, Вы видите это каждый день здесь на форуме. Например, http://www.google.ru. Я просто ввёл адрес, но при постинге он перестал быть просты текстом и стал ссылкой, на которую Вы можете кликнуть. dimarik, это понятие близкое к ЧПУ, но относящиеся к линкам. Проще говоря ссылки, на которые можно кликнуть и сразу перейти по адресу. Тебя беспокоит что это не общепринятый термин или ты действительно не понял о чем речь? |
Последние записи от 3p.station
- Спиннер. Кому лень писать. (12.06.2013)
- AIR. Показываем видео HD на несколько экранов (24.04.2013)
- Парсинг линков в стринге. (03.08.2011)
- автоотправка событий (24.05.2011)
- Список актуальных камер юзера. (11.03.2011)