把文本中的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里的条件判断
Feb 27 Javascript
一些常用且实用的原生JavaScript函数
Sep 08 Javascript
使用Javascript接收get传递的值的代码
Nov 30 Javascript
js open() 与showModalDialog()方法使用介绍
Sep 10 Javascript
浅析Cookie中的Path与domain
Dec 18 Javascript
关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法
May 17 Javascript
修改Jquery Dialog 位置的实现方法
Aug 26 Javascript
微信小程序 wx.login解密出现乱码的问题解决办法
Mar 10 Javascript
Vue服务端渲染和Vue浏览器端渲染的性能对比(实例PK )
Mar 31 Javascript
JS实现仿饿了么在浏览器标签页失去焦点时网页Title改变
Jun 01 Javascript
在Mac下彻底卸载node和npm的方法
May 16 Javascript
Layui tree 下拉菜单树的实例代码
Sep 21 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不用正则采集速度探究总结
2008/03/24 PHP
php-fpm超时时间设置request_terminate_timeout资源问题分析
2019/09/27 PHP
JQuery slideshow的一个小问题(如何发现及解决过程)
2013/02/06 Javascript
如何创建一个JavaScript弹出DIV窗口层的效果
2013/09/25 Javascript
JavaScript中的toDateString()方法使用详解
2015/06/12 Javascript
jquery+html5时钟特效代码分享(可设置闹钟并且语音提醒)
2020/03/30 Javascript
AngularJs Dependency Injection(DI,依赖注入)
2016/09/02 Javascript
微信小程序实战之自定义模态弹窗(8)
2017/04/18 Javascript
jQuery实现动态删除LI的方法
2017/05/30 jQuery
利用vue+elementUI实现部分引入组件的方法详解
2017/11/22 Javascript
vue 实现类似淘宝星级评分的示例
2018/03/01 Javascript
浅谈js获取ModelAndView值的问题
2018/03/28 Javascript
vue 列表页跳转详情页获取id以及详情页通过id获取数据
2019/03/27 Javascript
基于vue+axios+lrz.js微信端图片压缩上传方法
2019/06/25 Javascript
JavaScript实现H5接金币功能(实例代码)
2021/02/22 Javascript
python获取豆瓣电影简介代码分享
2014/01/16 Python
Python 查找字符在字符串中的位置实例
2018/05/02 Python
Python3实现的判断回文链表算法示例
2019/03/08 Python
Python列表与元组的异同详解
2019/07/02 Python
Python3的高阶函数map,reduce,filter的示例详解
2019/07/23 Python
Python3 requests文件下载 期间显示文件信息和下载进度代码实例
2019/08/16 Python
python调用函数、类和文件操作简单实例总结
2019/11/29 Python
PyTorch实现ResNet50、ResNet101和ResNet152示例
2020/01/14 Python
用python给csv里的数据排序的具体代码
2020/07/17 Python
大学毕业感言
2014/01/10 职场文书
新护士岗前培训制度
2014/02/02 职场文书
班级活动策划书
2014/02/06 职场文书
如何写自我鉴定
2014/03/19 职场文书
公司领导班子对照材料
2014/08/18 职场文书
合作协议书模板
2014/10/10 职场文书
2014年政风行风工作总结
2014/11/22 职场文书
部门经理助理岗位职责
2015/04/13 职场文书
pytorch锁死在dataloader(训练时卡死)
2021/05/28 Python
python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
2021/06/05 Python
面试提问mysql一张表到底能存多少数据
2022/03/13 MySQL
Python 一键获取电脑浏览器的账号密码
2022/05/11 Python