我有一个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_!~*'().;?:@&=+$,%#-]+)+/?)$"
任何帮助改变上述内容以确保用户输入完整有效的网址将不胜感激。
答案 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] )))/