URL验证的正则表达式(在JavaScript中)

时间:2009-09-11 11:16:25

标签: javascript regex validation url

是否有人使用正则表达式来验证网址(不是在文本段落中找到它们)?首选JavaScript代码段。

14 个答案:

答案 0 :(得分:49)

accepted answer bobince中做对了:只验证方案名称://,空格和双引号通常就足够了。以下是在JavaScript中实现验证的方法:

var url = 'http://www.google.com';
var valid = /^(ftp|http|https):\/\/[^ "]+$/.test(url);
// true

var r = /^(ftp|http|https):\/\/[^ "]+$/;
r.test('http://www.goo le.com');
// false

var url = 'http:www.google.com';
var r = new RegExp('/^(ftp|http|https):\/\/[^ "]+$/');
r.test(url);
// false

语法参考:

答案 1 :(得分:27)

实际的URL语法非常复杂,并且不容易在正则表达式中表示。大多数看起来很简单的正则表达式会产生许多假阴性和误报。请参阅娱乐these efforts,但即使最终结果也不好。

此外,您通常希望允许IRI以及旧式URI,因此我们可以链接到有效地址,例如:

http://en.wikipedia.org/wiki/Þ
http://例え.テスト/

我只会进行简单的检查:是否以一种已知良好的方法开头:名字?它没有空格和双引号吗?如果是这样那么地狱,它可能已经足够了。

答案 2 :(得分:16)

试试这个正则表达式

/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/

对我来说效果最好。

答案 3 :(得分:3)

<html>
<head>
<title>URL</title>
<script type="text/javascript">
    function validate() {
        var url = document.getElementById("url").value;
        var pattern = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
        if (pattern.test(url)) {
            alert("Url is valid");
            return true;
        } 
            alert("Url is not valid!");
            return false;

    }
</script>

</head>
<body>
URL :
<input type="text" name="url" id="url" />
<input type="submit" value="Check" onclick="validate();" />
</body>
</html>

答案 4 :(得分:3)

我在这方面取得了一些成功:

/^((ftp|http|https):\/\/)?www\.([A-z]+)\.([A-z]{2,})/
  • 它会检查以下一项或全部:ftp://,http://或https://
  • 需要www。
  • 检查任意数量的有效字符。
  • 最后,它检查它是否有域,并且该域至少为2个字符。

它显然不完美,但它很好地处理了我的案例

答案 5 :(得分:1)

试试这个regex,它对我有用:

function isUrl(s) {
    var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
    return regexp.test(s);
}

答案 6 :(得分:1)

我使用/ ^ [a-z] +:[^:] + $ / i正则表达式进行URL验证。请参阅带有URL验证的跨浏览器InputKeyFilter代码的示例。

<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Input Key Filter Test</title>
	<meta name="author" content="Andrej Hristoliubov anhr@mail.ru">
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
	
	<!-- For compatibility of IE browser with audio element in the beep() function.
	https://www.modern.ie/en-us/performance/how-to-use-x-ua-compatible -->
	<meta http-equiv="X-UA-Compatible" content="IE=9"/>
	
	<link rel="stylesheet" href="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.css" type="text/css">		
	<script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/Common.js"></script>
	<script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.js"></script>
	
</head>
<body>
URL: 
<input type="url" id="Url" value=":"/>
<script>
	CreateUrlFilter("Url", function(event){//onChange event
			inputKeyFilter.RemoveMyTooltip();
			var elementNewInteger = document.getElementById("NewUrl");
			elementNewInteger.innerHTML = this.value;
		}
		
		//onblur event. Use this function if you want set focus to the input element again if input value is NaN. (empty or invalid)
		, function(event){ this.ikf.customFilter(this); }
	);
</script>
 New URL: <span id="NewUrl"></span>

</body>
</html>

另请参阅我的页面example of the input key filter

答案 7 :(得分:1)

试试这个:

 var RegExp =/^(?:(?:https?|ftp):\/\/)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/i;

答案 8 :(得分:1)

/(?:http[s]?\/\/)?(?:[\w\-]+(?::[\w\-]+)?@)?(?:[\w\-]+\.)+(?:[a-z]{2,4})(?::[0-9]+)?(?:\/[\w\-\.%]+)*(?:\?(?:[\w\-\.%]+=[\w\-\.%!]+&?)+)?(#\w+\-\.%!)?/

答案 9 :(得分:1)

试试这个对我有用:

 /^(http[s]?:\/\/){0,1}(w{3,3}\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/;

答案 10 :(得分:1)

您可以在输入中简单使用type="url",并在js中使用checkValidity()进行检查

例如:

your.html

<input id="foo" type="url">

your.js

$("#foo").on("keyup", function() {
    if (this.checkValidity()) {
        // The url is valid
    } else {
        // The url is invalid
    }
});

答案 11 :(得分:1)

我找不到适合我需要的产品。撰写并发布@ https://gist.github.com/geoffreyrobichaux/0a7774b424703b6c0fffad309ab0ad0a

function sumEven(s) {
  return s.split('').map(x=>+x).filter(x=>x%2==0).reduce((a,b)=>a+b)
}

console.log(sumEven('idsv366f4386523ec64qe35c'))

答案 12 :(得分:1)

这个 REGEX 是@Aamir 回答的一个补丁,对我有用

/((?:(?:http?|ftp)[s]*:\/\/)?[a-z0-9-%\/\&=?\.]+\.[a-z]{2,4}\/?([^\s<>\#%"\,\{\}\\|\\\^\[\]`]+)?)/gi

它匹配这些 URL 格式

  1. yourwebsite.com
  2. yourwebsite.com/4564564/546564/546564?=adsfasd
  3. www.yourwebsite.com
  4. http://yourwebsite.com
  5. https://yourwebsite.com
  6. ftp://www.yourwebsite.com
  7. ftp://yourwebsite.com
  8. http://yourwebsite.com/4564564/546564/546564?=adsfasd

答案 13 :(得分:-1)

经过长时间的研究,我构建了这个reg表达式。我希望它也会帮助别人.......

url = 'https://google.co.in';
var re = /[a-z0-9-\.]+\.[a-z]{2,4}\/?([^\s<>\#%"\,\{\}\\|\\\^\[\]`]+)?$/;
if (!re.test(url)) { 
 alert("url error");
return false;
}else{
alert('success')
}