把文本中的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 相关文章推荐
比较简单的异步加载JS文件的代码
Jul 18 Javascript
基于jquery+thickbox仿校内登录注册框
Jun 07 Javascript
JQuery入门——事件切换之toggle()方法应用介绍
Feb 05 Javascript
jQuery页面图片伴随滚动条逐渐显示的小例子
Mar 21 Javascript
使用js dom和jquery分别实现简单增删改
Sep 11 Javascript
使用jQuery实现星级评分代码分享
Dec 09 Javascript
js 递归和定时器的实例解析
Feb 03 Javascript
使用vue.js编写蓝色拼图小游戏
Mar 17 Javascript
jQuery选择器之属性过滤选择器详解
Sep 28 jQuery
深入剖析JavaScript instanceof 运算符
Jun 14 Javascript
JavaScript中CreateTextFile函数
Aug 30 Javascript
vue操作dom元素的3种方法示例
Sep 20 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
php5 and xml示例
2006/11/22 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
2014/09/28 PHP
thinkphp 中的volist标签在ajax操作中的特殊性(推荐)
2018/01/15 PHP
laravel 配置路由 api和web定义的路由的区别详解
2019/09/03 PHP
PHP使用phpunit进行单元测试示例
2019/09/23 PHP
PHP二维数组分页2种实现方法解析
2020/07/09 PHP
jQuery获取当前对象标签名称的方法
2014/02/07 Javascript
jQuery中even选择器的定义和用法
2014/12/23 Javascript
jquery+CSS实现的多级竖向展开树形TRee菜单效果
2015/08/24 Javascript
Chrome浏览器的alert弹窗禁止再次弹出后恢复的方法
2016/12/30 Javascript
移动端基础事件总结与应用
2017/01/12 Javascript
分享一道关于闭包、bind和this的面试题
2017/02/20 Javascript
jQuery给表格添加分页效果
2017/03/02 Javascript
微信小程序开发之map地图实现教程
2017/06/08 Javascript
详解如何用模块化的方式写vuejs
2017/12/16 Javascript
详解Webpack多环境代码打包的方法
2018/08/03 Javascript
解决layui前端框架 form表单,table表等内置控件不显示的问题
2018/08/19 Javascript
React router动态加载组件之适配器模式的应用详解
2018/09/12 Javascript
Angular CLI 使用教程指南参考小结
2019/04/10 Javascript
关于angular 8.1使用过程中的一些记录
2020/11/25 Javascript
[00:53]2015国际邀请赛 中国区预选赛一触即发
2015/05/14 DOTA
对json字符串与python字符串的不同之处详解
2018/12/19 Python
python之验证码生成(gvcode与captcha)
2019/01/02 Python
浅谈Python_Openpyxl使用(最全总结)
2019/09/05 Python
pandas的相关系数与协方差实例
2019/12/27 Python
快速解决jupyter notebook启动需要密码的问题
2020/04/21 Python
python线程优先级队列知识点总结
2021/02/28 Python
意大利巧克力店:Chocolate Shop
2019/07/24 全球购物
铭立家具面试题
2012/12/06 面试题
排序都有哪几种方法?请列举。用JAVA实现一个快速排序
2014/02/16 面试题
最新的大学生找工作自我评价
2013/09/29 职场文书
个人先进事迹材料范文
2014/12/29 职场文书
2015年为民办实事工作总结
2015/05/26 职场文书
在pyCharm中下载第三方库的方法
2021/04/18 Python
MYSQL如何查看进程和kill进程
2022/03/13 MySQL
Python实现自动玩连连看的脚本分享
2022/04/04 Python