JavaScript验证url以http 和 https等开头的正则表达式

看看最宽松的URL

var matchString1 = 'https://www.jsdaxue.com';
var matchString2 = 'https://www.jsdaxue.com/';
var matchString3 = 'https://www.jsdaxue.com//'; // ==> 不允许非域名或参数以外的地方出现双“/”;
var matchString4 = 'https://www.jsdaxue.com/index.html';
var matchString5 = 'https://www.jsdaxue.com./index.html'; // ==> 不允许参数以外的地方以双“.”结尾;

var reURL = /^(https?|ftp|file):\/\/.+$/;

console.log(reURL.test(matchString1));//true
console.log(reURL.test(matchString2));//true
console.log(reURL.test(matchString3));//true [错误的URL也通过了]
console.log(reURL.test(matchString4));//true
console.log(reURL.test(matchString5));//true [错误的URL也通过了]

上面这种写法,很多错误的URL,都会匹配失误的;

~~~~

第一种正则写法

var reUrl01 = /^((ht|f)tps?):\/\/([\w-]+(\.[\w-]+)*\/?)+(\?([\w\-\.,@?^=%&:\/~\+#]*)+)?$/;

var reUrl01 = /^((ht|f)tps?):\/\/([\w-]+(\.[\w-]+)*\/?)+(\?([\w\-\.,@?^=%&:\/~\+#]*)+)?$/;

//(1)、直接匹配域名地址:
var matchString1 = 'https://www.jsdaxue.com';
console.log(reUrl01.test(matchString1)); // ==> true

var matchString2 = 'https://www.jsdaxue.com/';
console.log(reUrl01.test(matchString2)); // ==> true

var matchString3 = 'https://www.jsdaxue.com//'; // ==> 不允许非域名或参数以外的地方出现双“/”;
console.log(reUrl01.test(matchString3)); // ==> false

//(2)、匹配链接含(*.htm,*.html,*.php,*.aspx...)后缀的地址:
var matchString4 = 'https://www.jsdaxue.com/EditPosts.aspx';
console.log(reUrl01.test(matchString4)); // ==> true

var matchString5 = 'https://www.jsdaxue.com./EditPosts.aspx'; // ==> 不允许参数以外的地方以双“.”结尾;
console.log(reUrl01.test(matchString5)); // ==> false

//匹配含参数的地址

注:
(1)、如需允许其他联接方式,可以修改“(ht|f)tps?”部分,在“?”后面跟上符号“|”,然后加上您需要的联接方式,多个时用符号“|”分隔)。
(2)、如需允许URL参数包含其它字符,可以修改“[\w\-\.,@?^=%&:\/~\+#]”,以设置您需要的参数。

第二种的URL 正则验证

var matchString1 = 'https://www.jsdaxue.com';
var matchString2 = 'https://www.jsdaxue.com/';
var matchString3 = 'https://www.jsdaxue.com//'; // ==> 不允许非域名或参数以外的地方出现双“/”;
var matchString4 = 'https://www.jsdaxue.com/index.html';
var matchString5 = 'https://www.jsdaxue.com./index.html'; // ==> 不允许参数以外的地方以双“.”结尾;

function IsURL(str_url){
var strRegex = "^((https|http|ftp|rtsp|mms)?://)"
+ "?(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?" //ftp的user@
+ "(([0-9]{1,3}\.){3}[0-9]{1,3}" // IP形式的URL- 199.194.52.184
+ "|" // 允许IP和DOMAIN(域名)
+ "([0-9a-z_!~*'()-]+\.)*" // 域名- www.
+ "([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\." // 二级域名
+ "[a-z]{2,6})" // first level domain- .com or .museum
+ "(:[0-9]{1,4})?" // 端口- :80
+ "((/?)|" // 如果没有文件名,则不需要斜杠
+ "(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$";
var re=new RegExp(strRegex);
//re.test()
if (re.test(str_url)){
return (true);
}else{
return (false);
}
}

console.log(IsURL(matchString1));//true
console.log(IsURL(matchString2));//true
console.log(IsURL(matchString3));//false
console.log(IsURL(matchString4));//true
console.log(IsURL(matchString5));//false

~

上面2个正则验证基本可以验证大部分的URL,除非刻意的输错;

看看下面几个常见的非严谨的正则(下面是不严谨的正则)

var matchString1 = 'https://www.jsdaxue.com';
var matchString2 = 'https://www.jsdaxue.com/';
var matchString3 = 'https://www.jsdaxue.com//'; // ==> 不允许非域名或参数以外的地方出现双“/”;
var matchString4 = 'https://www.jsdaxue.com/index.html';
var matchString5 = 'https://www.jsdaxue.com./index.html'; // ==> 不允许参数以外的地方以双“.”结尾;

function CheckUrl1(str) {
var RegUrl = new RegExp();
RegUrl.compile("^[A-Za-z]+://[A-Za-z0-9-_]+\\.[A-Za-z0-9-_%&\?\/.=]+$");//jihua.cnblogs.com
if (!RegUrl.test(str)) {
return false;
}
return true;
}

function checkUrl2(urlString){
if(urlString!=""){
var reg=/(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/;
if(!reg.test(urlString)){
return false;
}
return true;
}
}

console.log(CheckUrl1(matchString1));//true
console.log(CheckUrl1(matchString2));//true
console.log(CheckUrl1(matchString3));//true [错误的URL也通过了]
console.log(CheckUrl1(matchString4));//true
console.log(CheckUrl1(matchString5));//true [错误的URL也通过了]

console.log(checkUrl2(matchString1));//true
console.log(checkUrl2(matchString2));//true
console.log(checkUrl2(matchString3));//true [错误的URL也通过了]
console.log(checkUrl2(matchString4));//true
console.log(checkUrl2(matchString5));//true [错误的URL也通过了]

~

网上摘抄的其它正则写法;

下面给大家分享一个常用的验证网址的正则表达式

正则表达式
(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?
匹配 http://regxlib.com/Default.aspx | http://electronics.cnet.com/electronics/0-6342366-8-8994967-1.html
不匹配 www.yahoo.com

正则表达式
^\\{2}[\w-]+\\(([\w-][\w-\s]*[\w-]+[$$]?$)|([\w-][$$]?$))
匹配 \\server\service | \\server\my service | \\serv_001\service$
不匹配 \\my server\service | \\server\ service | \\server$\service

正则表达式
^(http|https|ftp)\://([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&%\$\-]+)*@)?((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.[a-zA-Z]{2,4})(\:[0-9]+)?(/[^/][a-zA-Z0-9\.\,\?\’\\/\+&%\$#\=~_\-@]*)*$
匹配 http://www.sysrage.net | https://64.81.85.161/site/file.php?cow=moo’s |ftp://user:pass@host.com:123
不匹配 sysrage.net

正则表达式
^([a-zA-Z]\:|\\\\[^\/\\:*?”<>|]+\\[^\/\\:*?”<>|]+)(\\[^\/\\:*?”<>|]+)+(\.[^\/\\:*?”<>|]+)$
匹配 c:\Test.txt | \\server\shared\Test.txt | \\server\shared\Test.t
不匹配 c:\Test | \\server\shared | \\server\shared\Test.?

正则表达式
^(http|https|ftp)\://([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&%\$\-]+)*@)*((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|localhost|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\?\’\\\+&%\$#\=~_\-]+))*$
匹配 http://site.com/dir/file.php?var=moo | https://localhost |ftp://user:pass@site.com:21/file/dir
不匹配 site.com | http://site.com/dir//

正则表达式
^([a-zA-Z]\:)(\\[^\\/:*?<>”|]*(?<![ ]))*(\.[a-zA-Z]{2,6})$
匹配 C:\di___r\fi_sysle.txt | c:\dir\filename.txt
不匹配 c:\dir\file?name.txt

正则表达式
^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$
匹配 regexlib.com | this.is.a.museum | 3com.com
不匹配 notadomain-.com | helloworld.c | .oops.org

正则表达式
^(((ht|f)tp(s?))\://)?(www.|[a-zA-Z].)[a-zA-Z0-9\-\.]+\.(com|edu|gov|mil|net|org|biz|info|name|museum|us|ca|uk)(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\;\?\’\\\+&%\$#\=~_\-]+))*$
匹配 www.blah.com:8103 | www.blah.com/blah.asp?sort=ASC |www.blah.com/blah.htm#blah
不匹配 www.state.ga | http://www.testurl.ru

正则表达式
\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))
匹配 http://testurl.net/blah_blah | http://testurl.net/blah_blah/ | (Something like http://testurl.net/blah_blah) | http://testurl.net/blah_blah_(wikipedia) | (Something like http://testurl.net/blah_blah_(wikipedia)) | http://testurl.net/blah_blah. |http://testurl.net/blah_blah/. | <http://testurl.net/blah_blah> | <http://testurl.net/blah_blah/>| http://testurl.net/blah_blah, | http://www.example.com/wpstyle/?p=364. | http://?df.ws/123 | rdar://1234 | rdar:/1234 | http://userid:password@example.com:8080 |http://userid@example.com | http://userid@example.com:8080 |http://userid:password@example.com
不匹配 no_ws.example.com | no_proto_or_ws.com | /relative_resource.php

~~

未经允许不得转载:WEB前端开发 » JavaScript验证url以http 和 https等开头的正则表达式

赞 (6)