如何使用Regex验证完整有效的URL

时间:2010-09-14 18:22:01

标签: regex validation

我有一个URL验证方法,除了这个url通过:“http://”之外,它的效果非常好。我想确保用户输入了完整的网址:“http://www.stackoverflow.com”。

以下是我目前正在使用的模式:

"^(https?://)"
+ "?(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?" //user@ 
+ @"(([0-9]{1,3}\.){3}[0-9]{1,3}" // IP- 199.194.52.184 
+ "|" // allows either IP or domain 
+ @"([0-9a-z_!~*'()-]+\.)*" // tertiary domain(s)- www. 
+ @"([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\." // second level domain 
+ "[a-z]{2,6})" // first level domain- .com or .museum 
+ "(:[0-9]{1,4})?" // port number- :80 
+ "((/?)|" // a slash isn't required if there is no file name 
+ "(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$"

任何帮助改变上述内容以确保用户输入完整有效的网址将不胜感激。

3 个答案:

答案 0 :(得分:1)

为什么不使用urlparsing库?让我列出一些预先存在的语言解析库:

问我是否缺少一种语言。

这样,您可以先解析uri,然后检查以确保它通过您自己的验证规则。这是Python中的一个例子:

url = urlparse.urlparse(user_url)
if not (url.scheme and url.path):
    raise ValueError("User did not enter a correct url!")

既然你说你在asp.net上使用C#,这是一个例子(抱歉,我的c#知识有限):

user_url = "http://myUrl/foo/bar";
Uri uri = new Uri(user_url);
if (uri.Scheme == Uri.UriSchemeHttp && Uri.IsWellFormedUriString(user_url, UriKind.RelativeOrAbsolute)) {
    Console.WriteLine("I have a valid URL!");
}

答案 1 :(得分:0)

这几乎是常见问题解答。您只需尝试使用[regex] +validate +url进行搜索,或者只看一下这个答案:What is the best regular expression to check if a string is a valid URL

答案 2 :(得分:0)

我使用这个正则表达式。它对我来说很好。

/((([A-ZA-Z] {3,9-}:(://))(:????[ - ;:&安培; = + \ $,\ W] + @) A-ZA-Z0-9 .-] + |(:万维网| [ - ;:&安培; = + \ $,\ W] + @)[A-ZA-Z0-9 .-] +)(( ?:/ [+〜%/ \ W- 。] *)\ ??(:[ - + =安培;;%@ \ W 。] )#(???? :[\ W] )))/