把文本中的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使用eval或者new Function进行语法检查
Oct 16 Javascript
用JS控制回车事件的代码
Feb 20 Javascript
动态加载外部javascript文件的函数代码分享
Jul 28 Javascript
javascript对下拉列表框(select)的操作实例讲解
Nov 29 Javascript
textarea不能通过maxlength属性来限制字数的解决方法
Sep 01 Javascript
javascript中href和replace的比较(详解)
Nov 25 Javascript
js实现彩色条纹滚动条效果
Mar 15 Javascript
从零开始学习Node.js系列教程之设置HTTP头的方法示例
Apr 13 Javascript
vue init失败简单解决方法(终极版)
Dec 22 Javascript
Parcel 打包示例(React HelloWorld)
Jan 16 Javascript
JS前后端实现身份证号验证代码解析
Jul 23 Javascript
Vue和React有哪些区别
Sep 12 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中目录,文件操作详谈
2007/03/19 PHP
Discuz 6.0+ 批量注册用户名
2009/09/13 PHP
php获取数组长度的方法(有实例)
2013/10/27 PHP
PHP使用GIFEncoder类生成的GIF动态图片验证码
2014/07/01 PHP
在WordPress中使用wp-cron插件来设置定时任务
2015/12/10 PHP
Yii2主题(Theme)用法详解
2016/07/23 PHP
javascript 打印内容方法小结
2009/11/04 Javascript
location.search在客户端获取Url参数的方法
2010/06/08 Javascript
基于jquery的弹出提示框始终处于窗口的居中位置(类似于alert弹出框的效果)
2011/09/28 Javascript
原生js实现跨浏览器获取鼠标按键的值
2013/04/08 Javascript
JS将制定内容复制到剪切板示例代码
2014/02/11 Javascript
javascript将url中的参数加密解密代码
2014/11/17 Javascript
Bootstrap入门书籍之(零)Bootstrap简介
2016/02/17 Javascript
jQuery leonaScroll 1.1 自定义滚动条插件(推荐)
2016/09/17 Javascript
微信小程序 progress组件详解及实例代码
2016/10/25 Javascript
js简单正则验证汉字英文及下划线的方法
2016/11/28 Javascript
基于Vue2x实现响应式自适应轮播组件插件VueSliderShow功能
2018/05/16 Javascript
layui获取选中行数据的实例讲解
2018/08/19 Javascript
Nest.js 授权验证的方法示例
2021/02/22 Javascript
[01:14:41]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第一场 1月8日
2021/03/11 DOTA
用Python制作检测Linux运行信息的工具的教程
2015/04/01 Python
Python语言的面相对象编程方式初步学习
2016/03/12 Python
Python找出list中最常出现元素的方法
2016/06/14 Python
你应该知道的python列表去重方法
2017/01/17 Python
Python实现简单过滤文本段的方法
2017/05/24 Python
python执行使用shell命令方法分享
2017/11/08 Python
python+opencv实现阈值分割
2018/12/26 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
2020/02/18 Python
戛纳奢侈品商店:Jacques Loup法国
2019/11/04 全球购物
个人授权委托书
2014/04/03 职场文书
大学学生会竞选演讲稿
2014/04/25 职场文书
职务说明书范文
2014/05/07 职场文书
毕业生自荐信范文
2015/03/05 职场文书
工作后的感想
2015/08/07 职场文书
优秀员工演讲稿
2019/06/21 职场文书
mysq启动失败问题及场景分析
2021/07/15 MySQL