想用js配合正则检测字符串是否包含url,不出结果,求大神指导!

阿弥陀佛 2017-09-13 11:31:59
<script language="javascript" type="text/javascript">
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
  + "((/?)|" // a slash isn't required if there is no file name
  + "(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$";
  var re=new RegExp(strRegex);
 //re.test()
  if (re.test(str_url)){
  return (true);
  }else{
  return (false);
  }
 }

if (IsURL('abc'+'http://harveyzeng.iteye.com/blog/1776991'))
{
alert("have URL!")
}

</script>

底下的测试折腾了两个晚上,不能出结果,求大神指点下错误在哪?
想用此函数检测输入框里是否有url

感谢!
...全文
683 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿弥陀佛 2017-09-15
  • 打赏
  • 举报
回复
麻烦高手再帮我看看,如何将漏检的URL的正则表达式加进去?
天际的海浪 2017-09-14
  • 打赏
  • 举报
回复
你要判断的是包含,就不能匹配字符串开头^和结尾$ \在字符串中也是转义符,所以要写成\\
阿弥陀佛 2017-09-14
  • 打赏
  • 举报
回复
引用 1 楼 jslang 的回复:

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 
  + "((/?)|" // a slash isn't required if there is no file name 
  + "(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)"; 
  var re=new RegExp(strRegex); 
 //re.test()
  if (re.test(str_url)){
  return (true); 
  }else{ 
  return (false); 
  }
 }
请问改的哪儿?
天际的海浪 2017-09-14
  • 打赏
  • 举报
回复

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 
  + "((/?)|" // a slash isn't required if there is no file name 
  + "(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)"; 
  var re=new RegExp(strRegex); 
 //re.test()
  if (re.test(str_url)){
  return (true); 
  }else{ 
  return (false); 
  }
 }
阿弥陀佛 2017-09-14
  • 打赏
  • 举报
回复
引用 3 楼 jslang 的回复:
你要判断的是包含,就不能匹配字符串开头^和结尾$ \在字符串中也是转义符,所以要写成\\
感谢大神指点! 测试基本有效,但以下情况漏检:


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 
  + "((/?)|" // a slash isn't required if there is no file name 
  + "(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)"; 
  var re=new RegExp(strRegex); 
 //re.test()
  if (re.test(str_url)){
  return (true); 
  }else{ 
  return (false); 
  }
 }
 
 
 function flt()
 {
  var str=document.getElementById("txt").value;
if (IsURL(str)) 
	{ 
	alert("have URL!")
	//return false;
	}else{
	alert("no URL!")
	}
 }

<textarea id="txt" cols=400 rows=10>
<p><embed src="/WebSite2/Upload/flash/890.swf" type="application/x-shockwave-flash" play="true" loop="true" menu="true"></embed>
<img height="391" width="480" alt="" src="/WebSite2/Upload/image/hello.jpg" /><img alt="" src="http://localhost:3375/WebSite2/fckeditor/editor/images/smiley/20090515/115.gif" /></p>
判断其中 URL地址
</textarea>
<input type="button" value="判断" onclick="flt()">

阿弥陀佛 2017-09-14
  • 打赏
  • 举报
回复
引用 5 楼 a591402213 的回复:
你做这个东西的目的,我感觉是防外链吧,我建议分开去取,就比如上面代码,你可以先取出来src中的内容,然后判断里面的链接,是否合法 第一个正则:(?:src|href)=['"]([^'"]*) 取出链接 然后再使用正则判断符合你的条件
对,您说的对,就是判断只要有链接,就阻止贴入,不检查url的合法性。
Oliver5914 2017-09-14
  • 打赏
  • 举报
回复
引用 4 楼 emituofo 的回复:
[quote=引用 3 楼 jslang 的回复:]
你要判断的是包含,就不能匹配字符串开头^和结尾$
\在字符串中也是转义符,所以要写成\\


感谢大神指点!
测试基本有效,但以下情况漏检:




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
+ "((/?)|" // a slash isn't required if there is no file name
+ "(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)";
var re=new RegExp(strRegex);
//re.test()
if (re.test(str_url)){
return (true);
}else{
return (false);
}
}


function flt()
{
var str=document.getElementById("txt").value;
if (IsURL(str))
{
alert("have URL!")
//return false;
}else{
alert("no URL!")
}
}



<textarea id="txt" cols=400 rows=10>
<p><embed src="/WebSite2/Upload/flash/890.swf" type="application/x-shockwave-flash" play="true" loop="true" menu="true"></embed>
<img height="391" width="480" alt="" src="/WebSite2/Upload/image/hello.jpg" /><img alt="" src="http://localhost:3375/WebSite2/fckeditor/editor/images/smiley/20090515/115.gif" /></p>
判断其中 URL地址
</textarea>
<input type="button" value="判断" onclick="flt()">

[/quote]



你做这个东西的目的,我感觉是防外链吧,我建议分开去取,就比如上面代码,你可以先取出来src中的内容,然后判断里面的链接,是否合法
第一个正则:(?:src|href)=['"]([^'"]*) 取出链接

然后再使用正则判断符合你的条件

87,923

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧