把文本中的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 相关文章推荐
IE与FireFox的兼容性问题分析
Apr 22 Javascript
颜色选择器 Color Picker,IE,Firefox,Opera,Safar
Nov 25 Javascript
jquery子元素过滤选择器使用示例
Jun 24 Javascript
jquery弹出框的用法示例(一)
Aug 26 Javascript
jQuery学习笔记之jQuery中的$
Jan 19 Javascript
javascript计时器编写过程与实现方法
Feb 29 Javascript
js 实现数值的千分位及保存小数方法(推荐)
Aug 01 Javascript
jQuery控制控件文本的长度的操作方法
Dec 05 Javascript
原生JS实现ajax与ajax的跨域请求实例
Dec 01 Javascript
解决在vue项目中,发版之后,背景图片报错,路径不对的问题
Mar 06 Javascript
JavaScript ES6箭头函数使用指南
Dec 30 Javascript
bootstrap-table+treegrid实现树形表格
Jul 26 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 日常开发小技巧
2009/09/23 PHP
一个典型的PHP分页实例代码分享
2011/07/28 PHP
javascript+iframe 实现无刷新载入整页的代码
2010/03/17 Javascript
通过jQuery打造支持汉字,拼音,英文快速定位查询的超级select插件
2010/06/18 Javascript
Javascript 检测键盘按键信息及键码值对应介绍
2013/01/03 Javascript
Microsfot .NET Framework4.0框架 安装失败的解决方法
2013/08/14 Javascript
javascript的日期对象、数组对象、二维数组使用说明
2014/12/22 Javascript
深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解
2016/04/03 Javascript
BootStrap智能表单实战系列(八)表单配置json详解
2016/06/13 Javascript
JS实现的表格行上下移动操作示例
2016/08/03 Javascript
微信小程序实战之自定义toast(6)
2017/04/18 Javascript
JavaScript输入框字数实时统计更新
2017/06/17 Javascript
JS实现手写parseInt的方法示例
2017/09/24 Javascript
three.js实现3D影院的原理的代码分析
2017/12/18 Javascript
Vue-cli3项目配置Vue.config.js实战记录
2018/07/29 Javascript
JS实现canvas简单小画板功能
2020/06/23 Javascript
OpenLayers实现图层切换控件
2020/09/25 Javascript
[45:56]Ti4正赛第一天 VG vs NEWBEE 3
2014/07/19 DOTA
在Python中处理字符串之ljust()方法的使用简介
2015/05/19 Python
python连接字符串的方法小结
2015/07/13 Python
Python利用multiprocessing实现最简单的分布式作业调度系统实例
2017/11/14 Python
Python二叉树的定义及常用遍历算法分析
2017/11/24 Python
Python 实现数据结构中的的栈队列
2019/05/16 Python
解决Python在导入文件时的FileNotFoundError问题
2020/04/10 Python
python实现快速文件格式批量转换的方法
2020/10/16 Python
详解HTML5 window.postMessage与跨域
2017/05/11 HTML / CSS
为有想象力的人提供的生活方式商店:Firebox
2018/06/04 全球购物
办公室主任岗位职责
2013/11/08 职场文书
金属材料工程个人求职的自我评价
2013/12/04 职场文书
生产部主管岗位职责
2014/01/06 职场文书
2015年学校安全工作总结
2015/04/22 职场文书
婚庆公司开业主持词
2015/06/30 职场文书
外出学习心得体会范文
2016/01/18 职场文书
使用numpy实现矩阵的翻转(flip)与旋转
2021/06/03 Python
Python可视化学习之seaborn绘制矩阵图详解
2022/02/24 Python
HTML页面点击按钮关闭页面的多种方式
2022/12/24 HTML / CSS