JS正则判定常见URL

JS正则URL

最近在做聊天链接转卡片消息功能,需要先对URL合法性验证,以便减少不必要的抓取快照和摘要的请求。简单分享两个比较全面的正则表达式。

URL定义

摘自维基百科
统一资源定位符(或称统一资源定位器/定位地址、URL地址等[1],英语:Uniform Resource Locator,常缩写为URL),有时也被俗称为网页地址(网址)。如同在网络上的门牌,是因特网上标准的资源的地址(Address)。

URL的标准格式:

协议类型:[//服务器地址[:端口号]][/资源层级UNIX文件路径]文件名[?查询][#片段ID]

统一资源定位符的完整格式如下:

协议类型:[//[访问资源需要的凭证信息@]服务器地址[:端口号]][/资源层级UNIX文件路径]文件名[?查询][#片段ID]

注:其中【访问凭证信息@ :端口号 ?查询 #片段ID】都属于选填项。

这里提供两个正则表达式测试结果:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>URL检测</title>
</head>

<body>
    <script>
    /**
	 * 正则表达式判定Url
	 * @param url
	 * @returns {Boolean}
	 */
	function CHECK_URL(url){
		//url= 协议://(ftp的登录信息)[IP|域名](:端口号)(/或?请求参数)
		var strRegex = '^((https|http|ftp)://)?'//(https或http或ftp):// 可有可无
			+ '(([\\w_!~*\'()\\.&=+$%-]+: )?[\\w_!~*\'()\\.&=+$%-]+@)?' //ftp的user@  可有可无
			+ '(([0-9]{1,3}\\.){3}[0-9]{1,3}' // IP形式的URL- 3位数字.3位数字.3位数字.3位数字
			+ '|' // 允许IP和DOMAIN(域名) 
			+ '(localhost)|'	//匹配localhost
			+ '([\\w_!~*\'()-]+\\.)*' // 域名- 至少一个[英文或数字_!~*\'()-]加上.
			+ '\\w+\\.' // 一级域名 -英文或数字  加上.
			+ '[a-zA-Z]{1,6})' // 顶级域名- 1-6位英文 
			+ '(:[0-9]{1,5})?' // 端口- :80 ,1-5位数字
			+ '((/?)|' // url无参数结尾 - 斜杆或这没有
			+ '(/[\\w_!~*\'()\\.;?:@&=+$,%#-]+)+/?)$';//请求参数结尾- 英文或数字和[]内的各种字符
        
        var strRegex1 = '^(?=^.{3,255}$)((http|https|ftp)?:\/\/)?(www\.)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+(:\d+)*(\/)?(?:\/(.+)\/?$)?(\/\w+\.\w+)*([\?&]\w+=\w*|[\u4e00-\u9fa5]+)*$';
		var re=new RegExp(strRegex,'i');//i不区分大小写
		console.log(re);
		//将url做uri转码后再匹配,解除请求参数中的中文和空字符影响
		if (re.test(encodeURI(url))) {
			return (true);
		} else {
			return (false);
		}
	}
    var textArr = ['www.baidu.com','http://www.baidu.com','http://www.baidu.com/','https://www.baidu.com/a/b/c','https://www.baidu.com:8080/a/b?t=123','https://www.baidu.com:8080/a/b?t=123&c=王炸','https://www.baidu.com:8080?a=网&b=33','http://192.168.99.111:1212/a/b/c','112.22.12.2','a.b.c','localhost/cc/2/b/5','ftp://192.17.11.22:22/测试.tar','https://m.www.baidu.我爱你:8080?a=战三&b=333&c=666'];
    for(var i in textArr){
    	var a = CHECK_URL(textArr[i]);
    	document.write('测试 '+textArr[i]+' 结果:'+a+'<br>');
    }
    </script>
</body>

</html>

执行结果:

测试结果

注: 如果需要别的语言版本的正则,请通过
在线正则转化,进行转成部分语言下的语法格式。

参考:
1.钉钉聊天中链接转卡片服务
2.nodeJS实现文本摘要算法

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值