把文本中的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 相关文章推荐
一个多次搜索+多次传值的解决方案
Jan 20 Javascript
通过继承IHttpHandle实现JS插件的组织与管理
Jul 13 Javascript
jquery京东商城双11焦点图多图广告特效代码分享
Sep 06 Javascript
Kindeditor单独调用多图上传实例
Jul 31 Javascript
JS基于贪心算法解决背包问题示例
Nov 27 Javascript
vue获取当前激活路由的方法
Mar 17 Javascript
vue awesome swiper异步加载数据出现的bug问题
Jul 03 Javascript
Angularjs 根据一个select的值去设置另一个select的值方法
Aug 13 Javascript
jquery分页插件pagination使用教程
Oct 23 jQuery
一文了解vue-router之hash模式和history模式
May 31 Javascript
JavaScript常用8种数组去重代码实例
Sep 09 Javascript
JS实现简单九宫格抽奖
Jun 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中运用jQuery的Ajax跨域调用实现代码
2012/02/21 PHP
PHP中文件读、写、删的操作(PHP中对文件和目录操作)
2012/03/06 PHP
js 兼容多浏览器的回车和鼠标焦点事件代码(IE6/7/8,firefox,chrome)
2010/04/14 Javascript
JS中不为人知的五种声明Number的方式简要概述
2013/02/22 Javascript
用jquery等比例控制图片宽高的具体实现
2014/01/28 Javascript
JavaScript中的原型链prototype介绍
2014/12/30 Javascript
高性能JavaScript模板引擎实现原理详解
2015/02/05 Javascript
JavaScript检查子字符串是否在字符串中的方法
2016/02/03 Javascript
Jquery跨浏览器文本复制插件Zero Clipboard的使用方法
2016/02/28 Javascript
JS组件Bootstrap按钮组与下拉按钮详解
2016/05/10 Javascript
javascript之with的使用(阿里云、淘宝使用代码分析)
2016/10/11 Javascript
JS 组件系列之 bootstrap treegrid 组件封装过程
2017/04/28 Javascript
bootstrap Table服务端处理分页(后台是.net)
2017/10/19 Javascript
ionic3实战教程之随机布局瀑布流的实现方法
2017/12/28 Javascript
vue实现城市列表选择功能
2018/07/16 Javascript
vue+axios+mock.js环境搭建的方法步骤
2018/08/28 Javascript
JS调用安卓手机摄像头扫描二维码
2018/10/16 Javascript
微信小程序云开发之使用云函数
2019/05/17 Javascript
[00:38]TI珍贵瞬间系列(二):笑
2020/08/26 DOTA
python实现批量解析邮件并下载附件
2018/06/19 Python
Python3爬虫学习之应对网站反爬虫机制的方法分析
2018/12/12 Python
Python3.0中普通方法、类方法和静态方法的比较
2019/05/03 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
2020/02/28 Python
Python读取文件内容为字符串的方法(多种方法详解)
2020/03/04 Python
python中wx模块的具体使用方法
2020/05/15 Python
Django生成数据库及添加用户报错解决方案
2020/10/09 Python
使用AJAX和Django获取数据的方法实例
2020/10/25 Python
CSS3贝塞尔曲线示例:创建链接悬停动画效果
2020/11/19 HTML / CSS
记一次高分屏下canvas模糊问题
2020/02/17 HTML / CSS
The Hut美国/加拿大:英国领先的豪华在线百货商店
2019/03/26 全球购物
用你熟悉的语言写一个连接ORACLE数据库的程序,能够完成修改和查询工作
2012/06/11 面试题
干部考核评语
2014/04/29 职场文书
故意伤害罪辩护词
2015/05/21 职场文书
导游词之丹东鸭绿江
2019/10/24 职场文书
Python requests库参数提交的注意事项总结
2021/03/29 Python
InterProcessMutex实现zookeeper分布式锁原理
2022/03/21 Java/Android