Gimhoy's Blog

您曾经浏览过

JS验证URL正则表达式

本文最后更新于2015年1月29日,已超过一年没有更新,如果文章内容失效,请反馈给我们,谢谢!

网上闲逛看到一个改进版的验证url是否有效的正则表达式,最近正好有用,转来Mark一下。

原文地址:http://www.soulteary.com/2014/12/05/better-url-regexp-in-js.html

/**
 * 正则表达式判断网址是否有效
 */
 
(function(){
    "use strict";
 
    varurlDict=[
        //Bad Case
        'www.baidu.com',                      //常规网址,未带协议头的地址
        'w.baidu.com',                        //常规网址,短子域名
        'baidu.com',                          //常规网址,仅有主域名
        '测试.com',                           //非常规合法网址,中文域名不在参考之列
        '1.2',                                //错误域名
        '  WWWW ',                            //无效字符串
        '111测试',                            //无效字符串
        //Correct Case
        'http://baidu.com',                   //常规网址,仅有主域名
        'http://www.baidu.com',               //常规网址,带子域名
        'https://www.baidu.com/',             //常规网址,使用https协议头,带根目录
        'http://www.baidu.com/api',           //常规网址,有一级目录下资源
        'http://www.subdomain.baidu.com/index/subdir',      //常规网址,多级子域名,多级目录
        'http://www.www.subdomain.baidu.com/index/subdir/',//常规网址,多级子域名,多级目录,目录地址闭合
        'http://io.io'                        //非常规网址,多级子域名,多级目录,目录地址闭合
    ];
 
    // 建议的正则
    functionisURL(str){
        return!!str.match(/(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)$/g);
    }
 
    // 不知道谁写的简单版的坑爹正则
    functionbadRegFn(str){
        return!!str.match(/(http[s]?|ftp):\/\/[^\/\.]+?\..+\w$/g);
    }
 
 
    // 测试用例覆盖
    (function(){
        varret={};
 
        varcollect=function(link){
            varobj={},fnList=[isURL,badRegFn];
            for(vari=0,j=fnList.length;i<j;i++){
                varfn=fnList[i];
                obj[fn.name]=fn.call(null,link);
            }
            returnobj;
        };
 
        for(vari=0,j=urlDict.length;i<j;i++){
            ret[urlDict[i]]=collect(urlDict[i]);
        }
 
        console.log(ret),console.table(ret);
    }());
 
}());



免费获得每月10G空间+10G免费流量
  • Comment (3)
  • Trackback (0)
  • lyfingGoogle ChromeWindowsChina2015/03/07 16:13@Ta

    请问博主,广告屏蔽检测是怎么做到的

    #2
  • EHS人Google ChromeWindowsChina2015/01/30 15:24@Ta

    怎么不移植4.1最新版本了呢?
    还有SCS-support。。。
    还期待支持sae呢。
    🙂

    #1
  • 还没有Trackback