把文本中的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 相关文章推荐
用Jquery实现多级下拉框无刷新的联动
Dec 22 Javascript
按钮接受回车事件的三种实现方法
Jun 06 Javascript
javascript获取元素偏移量的方法有哪些
Jun 24 Javascript
jquery带有索引按钮且自动轮播切换特效代码分享
Sep 15 Javascript
150行Node.js实现的dns代理工具
Aug 02 Javascript
vue实现吸顶、锚点和滚动高亮按钮效果
Oct 21 Javascript
Vue 中 filter 与 computed 的区别与用法解析
Nov 21 Javascript
vue中英文切换实例代码
Jan 21 Javascript
Vue 技巧之控制父类的 slot
Feb 24 Javascript
uniapp实现可以左右滑动导航栏
Oct 21 Javascript
vue 单页应用和多页应用的优劣
Oct 22 Javascript
vue实现动态给id赋值,点击事件获取当前点击的元素的id操作
Nov 09 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
Laravel下生成验证码的类
2017/11/15 PHP
jQuery 处理表单元素的代码
2010/02/15 Javascript
JavaScript中的prototype使用说明
2010/04/13 Javascript
Javascript排序算法之合并排序(归并排序)的2个例子
2014/04/04 Javascript
js实现漂浮回顶部按钮实例
2015/05/06 Javascript
详解javascript中的事件处理
2015/11/06 Javascript
Web性能优化系列 10个提升JavaScript性能的技巧
2016/09/27 Javascript
javascript中href和replace的比较(详解)
2016/11/25 Javascript
完美解决jQuery 鼠标快速滑过后,会执行多次滑出的问题
2016/12/08 Javascript
JS实现带动画的回到顶部效果
2017/12/28 Javascript
JS中通过url动态获取图片大小的方法小结(两种方法)
2018/10/31 Javascript
小程序实现新用户判断并跳转激活的方法
2019/05/20 Javascript
vue+django实现一对一聊天功能的实例代码
2019/07/17 Javascript
layui 点击重置按钮, select 并没有被重置的解决方法
2019/09/03 Javascript
解决layer.confirm快速点击会重复触发事件的问题
2019/09/23 Javascript
JS实现商品橱窗特效
2020/01/09 Javascript
[01:19]2014DOTA2国际邀请赛 采访TITAN战队ohaiyo 能赢DK很幸运
2014/07/12 DOTA
Python正则表达式匹配ip地址实例
2014/10/09 Python
Python爬取国外天气预报网站的方法
2015/07/10 Python
django批量导入xml数据
2016/10/16 Python
浅谈python中np.array的shape( ,)与( ,1)的区别
2018/06/04 Python
Django 多环境配置详解
2019/05/14 Python
Pandas删除数据的几种情况(小结)
2019/06/21 Python
python脚本开机自启的实现方法
2019/06/28 Python
python爬虫模拟浏览器访问-User-Agent过程解析
2019/12/28 Python
HTML5 3D旋转相册的实现示例
2019/12/03 HTML / CSS
澳洲健康食品网上商店:Aussie Health Products
2018/06/15 全球购物
阿联酋航空丹麦官方网站:Emirates DK
2019/08/25 全球购物
PHP面试题及答案二
2015/05/23 面试题
某公司部分笔试题
2013/11/05 面试题
支部书记四风对照材料
2014/08/28 职场文书
党员个人总结范文
2015/02/14 职场文书
办公室年度工作总结2015
2015/05/21 职场文书
团组织推荐意见
2015/06/05 职场文书
Python中Cookies导出某站用户数据的方法
2021/05/17 Python
MySQL实例精讲单行函数以及字符数学日期流程控制
2021/10/15 MySQL