把文本中的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 相关文章推荐
javascript之更有效率的字符串替换
Aug 02 Javascript
教你如何使用PHP输出中文JSON字符串
May 22 Javascript
jQuery 2.0.3 源码分析之core(一)整体架构
May 27 Javascript
JavaScript的null和undefined区别示例介绍
Sep 15 Javascript
jQuery跨域问题解决方案
Aug 03 Javascript
jquery实现左右滑动菜单效果代码
Aug 27 Javascript
js实现带缓冲效果的仿QQ面板折叠菜单代码
Sep 06 Javascript
javascript精确统计网站访问量实例代码
Dec 19 Javascript
JavaScript基于面向对象实现的猜拳游戏
Jan 03 Javascript
解决vue项目中type=”file“ change事件只执行一次的问题
May 16 Javascript
node.js处理前端提交的GET请求
Aug 30 Javascript
使用Karma做vue组件单元测试的实现
Jan 16 Javascript
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
实现 win2003 下 mysql 数据库每天自动备份
2006/12/06 PHP
php中使用Curl、socket、file_get_contents三种方法POST提交数据
2011/08/12 PHP
浅谈PHP各环境下的伪静态配置
2019/03/13 PHP
JS delegate与live浅析
2013/12/21 Javascript
JavaScript制作的可折叠弹出式菜单示例
2014/04/04 Javascript
jQuery实现鼠标划过修改样式的方法
2015/04/14 Javascript
基于jQuery实现仿51job城市选择功能实例代码
2016/03/02 Javascript
好好了解一下Cookie(强烈推荐)
2016/06/14 Javascript
JS中如何比较两个Json对象是否相等实例代码
2016/07/13 Javascript
Bootstrap 3 按钮标签实例代码
2017/02/21 Javascript
jQuery判断网页是否已经滚动到浏览器底部的实现方法
2017/10/27 jQuery
LayerClose弹窗关闭刷新方法
2018/08/17 Javascript
JS使用Date对象实时显示当前系统时间简单示例
2018/08/23 Javascript
vue框架下部署上线后刷新报404问题的解决方案(推荐)
2019/04/03 Javascript
[01:04:22]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 IG vs EG
2018/04/01 DOTA
独特的python循环语句
2016/11/20 Python
python中int与str互转方法
2018/07/02 Python
Django Rest framework解析器和渲染器详解
2019/07/25 Python
python实现多进程通信实例分析
2019/09/01 Python
在Python中画图(基于Jupyter notebook的魔法函数)
2019/10/28 Python
什么是python的必选参数
2020/06/21 Python
浅谈PyTorch中in-place operation的含义
2020/06/27 Python
python里反向传播算法详解
2020/11/22 Python
python中openpyxl和xlsxwriter对Excel的操作方法
2021/03/01 Python
普通PHP程序员笔试题
2016/01/01 面试题
Java程序开发中如何应用线程
2016/03/03 面试题
五一家具促销方案
2014/01/10 职场文书
公司总经理岗位职责
2014/03/15 职场文书
股东合作协议书范本
2014/04/14 职场文书
消防安全标语
2014/06/07 职场文书
学习十八大演讲稿
2014/09/15 职场文书
2014年小学生迎国庆65周年演讲稿
2014/09/27 职场文书
2015年依法治校工作总结
2015/07/27 职场文书
2016年大学校运会广播稿件
2015/12/21 职场文书
银行培训心得体会范文
2016/01/09 职场文书
如何理解Vue前后端数据交互与显示
2021/05/10 Vue.js