把文本中的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-表格排序(降序/反序)实现介绍(附图)
May 30 Javascript
一个JavaScript变量声明的知识点
Oct 28 Javascript
JS实现随机乱撞彩色圆球特效的方法
May 05 Javascript
jQuery实现的简洁下拉菜单导航效果代码
Aug 26 Javascript
学习javascript面向对象 实例讲解面向对象选项卡
Jan 04 Javascript
webpack+vue.js快速入门教程
Oct 12 Javascript
Angular.js中下拉框实现渲染html的方法
Jun 18 Javascript
JavaScript之Map和Set_动力节点Java学院整理
Jun 29 Javascript
Vue2.0点击切换类名改变样式的方法
Aug 22 Javascript
解决Vue项目打包后打开index.html页面显示空白以及图片路径错误的问题
Oct 25 Javascript
微信浏览器下拉黑边解决方案 wScroollFix
Jan 21 Javascript
vue引用外部JS的两种种方法
Jan 28 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
PHP文本操作类
2006/11/25 PHP
PHP校验ISBN码的函数代码
2011/01/17 PHP
linux下为php添加curl扩展的方法
2011/07/29 PHP
php从数组中随机抽取一些元素的代码
2012/11/05 PHP
php断点续传之如何分割合并文件
2014/03/22 PHP
PHP获取一年有几周以及每周开始日期和结束日期
2015/08/06 PHP
CI操作cookie的方法分析(基于helper类库)
2016/03/28 PHP
PHP多个图片压缩成ZIP的方法
2020/08/18 PHP
javascript 装载iframe子页面,自适应高度
2009/03/20 Javascript
nodejs 后缀名判断限制代码
2011/03/31 NodeJs
Javascript异步编程的4种方法让你写出更出色的程序
2013/01/17 Javascript
JavaScript获取两个数组交集的方法
2015/06/09 Javascript
AngularJs 弹出模态框(model)
2016/04/07 Javascript
Vue 拦截器对token过期处理方法
2018/01/23 Javascript
ES6基础之展开语法(Spread syntax)
2019/02/21 Javascript
微信小程序后台持续定位功能使用详解
2019/08/23 Javascript
基于html+css+js实现简易计算器代码实例
2020/02/28 Javascript
javascript实现的图片预览和上传功能示例【兼容IE 9】
2020/05/01 Javascript
0基础学习前端开发的一些建议
2020/07/14 Javascript
js+audio实现音乐播放器
2020/09/13 Javascript
python和pyqt实现360的CLable控件
2014/02/21 Python
Python中实现三目运算的方法
2015/06/21 Python
python使用threading获取线程函数返回值的实现方法
2017/11/15 Python
python笔记之mean()函数实现求取均值的功能代码
2019/07/05 Python
Python计算两个矩形重合面积代码实例
2019/09/16 Python
如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱
2019/11/19 Python
Python延迟绑定问题原理及解决方案
2020/08/04 Python
html5时钟实现代码
2010/10/22 HTML / CSS
html5需遵循的6个设计原则
2016/04/27 HTML / CSS
说出一些常用的类,包,接口
2014/09/22 面试题
运动会开幕式邀请函
2014/01/22 职场文书
高中综合实践活动总结
2014/07/07 职场文书
教务处教学工作总结
2015/08/10 职场文书
《鸟的天堂》教学反思
2016/02/19 职场文书
python 使用Tensorflow训练BP神经网络实现鸢尾花分类
2021/05/12 Python
linux下安装redis图文详细步骤
2021/12/04 Redis