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

Regular expression for URL validation (in JavaScript)

是否有人有一个用于验证URL的regex(而不是在文本通道中找到它们)?最好使用javascript代码段。


在被接受的答案中,Bobines做得对:通常只验证方案名,:/,空格和双引号就足够了。以下是如何在javascript中实现验证:

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

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

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

语法参考:

  • MDN RegExp对象
  • W3Schools RegExp对象


实际的URL语法相当复杂,不容易在regex中表示。大多数看起来很简单的正则表达式会给出许多假否定和假阳性。这些努力看得好笑,但即使最终结果也不好。

此外,现在您通常希望允许IRI和旧学校的URI,因此我们可以链接到有效地址,如:

1
2
http://en.wikipedia.org/wiki/T
http://例え.テスト/

我只做简单的检查:它是从一个已知的好方法开始的:名称?它没有空格和双引号吗?如果是这样的话,那就见鬼去吧,可能已经够好了。


试试这个正则表达式

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

它最适合我。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<html>
<head>
URL
<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;

    }


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


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

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

这显然不完美,但我的案子处理得很好


试试这个,它对我有用:

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


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


尝试一下:

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;

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    Input Key Filter Test
    <meta name="author" content="Andrej Hristoliubov [email protected]">
    <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 type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.js">
   
</head>
<body>
URL:
<input type="url" id="Url" value=":"/>

    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); }
    );

 New URL: <span id="NewUrl"></span>

</body>
</html>

另请参见我的页面输入键过滤器示例。


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

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


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

1
2
3
4
5
6
7
8
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')
}