把文本中的URL地址转换为可点击链接的JavaScript、PHP自定义函数


Posted in Javascript onJuly 29, 2014

这几天在写一个小程序的时候,需要用到正则表达式匹配用户输入文本中的URL地址,然后将URL地址替换成可以点击的链接。URL地址的匹配,我想这应该是大家在做验证处理中常会用到的,这里就把我整合的一个比较完整的表达式给出来:

var URL = /(https?:\/\/|ftps?:\/\/)?((\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(:[0-9]+)?|(localhost)(:[0-9]+)?|([\w]+\.)(\S+)(\w{2,4})(:[0-9]+)?)(\/?([\w#!:.?+=&%@!\-\/]+))?/ig;

这个表达式可以匹配 http,https,ftp,ftps以及IP地址的URL地址。还算是URL地址匹配计较完善的。利用这个表达式我写了两个小函数,将用户留言的URL地址替换成可点击的链接,没有什么太难的,就是利用JavaScript 的 replace() 函数来实现替换 URL 为 link:

JavaScript版:

/**

 * JavaScrit 版本

 * 将URL地址转化为完整的A标签链接代码

 */

var replaceURLToLink = function (text) {

        text = text.replace(URL, function (url) {

            var urlText = url;

            if (!url.match('^https?:\/\/')) {

                url = 'http://' + url;

            }

            return '' + urlText + '';

        });
        return text;

    };

PHP版:

/**

 * PHP 版本 在 Silva 代码的基础上修改的

 * 将URL地址转化为完整的A标签链接代码

 */

/** =============================================

 NAME        : replace_URLtolink()

 VERSION     : 1.0

 AUTHOR      : J de Silva

 DESCRIPTION : returns VOID; handles converting

 URLs into clickable links off a string.

 TYPE        : functions

 ============================================= */
function replace_URLtolink($text) {

    // grab anything that looks like a URL...

    $urls = array();

    

    // build the patterns

    $scheme = '(https?\:\/\/|ftps?\:\/\/)?';

    $www = '([\w]+\.)';

    $local = 'localhost';

    $ip = '(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})';

    $name = '([\w0-9]+)';

    $tld = '(\w{2,4})';

    $port = '(:[0-9]+)?';

    $the_rest = '(\/?([\w#!:.?+=&%@!\-\/]+))?';

    $pattern = $scheme.'('.$ip.$port.'|'.$www.$name.$tld.$port.'|'.$local.$port.')'.$the_rest;

    $pattern = '/'.$pattern.'/is';

    

    // Get the URLs

    $c = preg_match_all($pattern, $text, $m);

    

    if ($c) {

        $urls = $m[0];

    }

    

    // Replace all the URLs

    if (! empty($urls)) {

        foreach ($urls as $url) {

            $pos = strpos('http\:\/\/', $url);

            

            if (($pos && $pos != 0) || !$pos) {

                $fullurl = 'http://'.$url;

            } else {

                $fullurl = $url;

            }

            

            $link = ''.$url.'';

            

            $text = str_replace($url, $link, $text);

        }

    }

    

    return $text;

}
Javascript 相关文章推荐
Extjs学习笔记之三 extjs form更多的表单项
Jan 07 Javascript
jQuery Lightbox 图片展示插件使用说明
Apr 25 Javascript
javascript中运用闭包和自执行函数解决大量的全局变量问题
Dec 30 Javascript
关闭浏览器时提示onbeforeunload事件
Dec 25 Javascript
使用jquery+CSS实现控制打印样式
Dec 31 Javascript
jQuery实现的Tab滑动选项卡及图片切换(多种效果)小结
Sep 14 Javascript
Bootstrap零基础学习第一课之模板
Jul 18 Javascript
jQuery实现页面点击后退弹出提示框的方法
Aug 24 Javascript
移动端滑动插件Swipe教程
Oct 16 Javascript
js实现点击上传图片并设为模糊背景
Aug 02 Javascript
vue组件入门知识全梳理
Sep 21 Javascript
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
Jan 08 Vue.js
JavaScript eval() 函数介绍及应用示例
Jul 29 #Javascript
javascript从image转换为base64位编码的String
Jul 29 #Javascript
javascript自定义函数参数传递为字符串格式
Jul 29 #Javascript
处理文本部分内容的TextRange对象应用实例
Jul 29 #Javascript
js键盘事件的keyCode
Jul 29 #Javascript
js识别不同浏览器基于userAgent做判断
Jul 29 #Javascript
让浏览器DOM元素最后加载的js方法
Jul 29 #Javascript
You might like
jquery异步调用页面后台方法‏(asp.net)
2011/03/01 Javascript
jquery常用技巧及常用方法列表集合
2011/04/06 Javascript
ie6下png图片背景不透明的解决办法使用js实现
2013/01/11 Javascript
JS实现网页背景颜色与select框中颜色同时变化的方法
2015/02/27 Javascript
javascript动态获取登录时间和在线时长
2016/02/25 Javascript
Node.js环境下JavaScript实现单链表与双链表结构
2016/06/12 Javascript
浅析BootStrap Treeview的简单使用
2016/10/12 Javascript
ajax级联菜单实现方法实例分析
2016/11/28 Javascript
BootStrap 模态框实现刷新网页并关闭功能
2017/01/04 Javascript
原生JS实现九宫格抽奖效果
2017/04/01 Javascript
深入理解JS中Number(),parseInt(),parseFloat()三者比较
2018/08/24 Javascript
如何将百度地图包装成Vue的组件的方法步骤
2019/02/12 Javascript
JS中的算法与数据结构之列表(List)实例详解
2019/08/16 Javascript
js获取 gif 的帧数的代码实例
2019/09/10 Javascript
vue开发移动端底部导航条功能
2020/04/08 Javascript
JQuery通过键盘控制键盘按下与松开触发事件
2020/08/07 jQuery
Python中的模块和包概念介绍
2015/04/13 Python
Python中实现参数类型检查的简单方法
2015/04/21 Python
Python3 循环语句(for、while、break、range等)
2017/11/20 Python
Python延时操作实现方法示例
2018/08/14 Python
pandas 数据归一化以及行删除例程的方法
2018/11/10 Python
python中比较两个列表的实例方法
2019/07/04 Python
Python实现FTP文件传输的实例
2019/07/07 Python
Python re正则表达式元字符分组()用法分享
2020/02/10 Python
pycharm快捷键汇总
2020/02/14 Python
python数据分析:关键字提取方式
2020/02/24 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
2020/10/02 Python
详解利用css3的var()实现运行时改变scss的变量值
2021/03/02 HTML / CSS
BabyBjörn婴儿背带法国官网:BabyBjorn法国
2018/06/16 全球购物
Zooplus罗马尼亚:宠物食品和配件
2019/11/02 全球购物
高中自我鉴定
2013/12/20 职场文书
党的群众路线教育实践活动个人对照检查材料(企业)
2014/11/05 职场文书
婚宴邀请函
2015/01/30 职场文书
厉行节约工作总结
2015/08/12 职场文书
车位出租协议书范本
2016/03/19 职场文书
2019中秋节祝福语大全,提前收藏啦
2019/09/10 职场文书