NET问答: 如何检查一个 string 是否为有效的 url 格式?
Posted dotNET跨平台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NET问答: 如何检查一个 string 是否为有效的 url 格式?相关的知识,希望对你有一定的参考价值。
咨询区
kenchilada:
我发现 framework 里有两个验证url有效性的方法:Uri.IsWellFormedUriString
和 Uri.TryCreate
,我试了一下这两个方法在验证 文件路径
时都返回 true。
请问我有什么有效的方法可以验证某个 string 是否为有效的 HTTP URL
格式呢?
回答区
Erçin Dedeoğlu:
可以用 Uri.TryCreate
实现,为此我写了一个扩展方法。
public static bool CheckURLValid(this string source)
{
Uri uriResult;
return Uri.TryCreate(source, UriKind.Absolute, out uriResult) && uriResult.Scheme == Uri.UriSchemeHttp;
}
然后像下面这样使用。
string url = "htts://adasd.xc.";
if(url.CheckUrlValid())
{
//valid process
}
41686d6564:
我发现大家的答案都有两个问题。
都允许
file://
,ftp://
开头的 url。如果url没有以
http://
,https://
开头则不能通过,eg:(google.com)
所以这并不完美,那如何解决呢?下面是我优化后的方案。
public static bool ValidHttpURL(string s, out Uri resultURI)
{
if (!Regex.IsMatch(s, @"^https?:\\/\\/", RegexOptions.IgnoreCase))
s = "http://" + s;
if (Uri.TryCreate(s, UriKind.Absolute, out resultURI))
return (resultURI.Scheme == Uri.UriSchemeHttp ||
resultURI.Scheme == Uri.UriSchemeHttps);
return false;
}
然后用下面的方式进行测试。
string[] inputs = new[] {
"https://www.google.com",
"http://www.google.com",
"www.google.com",
"google.com",
"javascript:alert('Hack me!')"
};
foreach (string s in inputs)
{
Uri uriResult;
bool result = ValidHttpURL(s, out uriResult);
Console.WriteLine(result + "\\t" + uriResult?.AbsoluteUri);
}
输出结果。
True https://www.google.com/
True http://www.google.com/
True http://www.google.com/
True http://google.com/
False
点评区
在用户表单验证中,这种需求还是非常常见的, Uri.TryCreate
用来做服务器端验证是一个绝佳的方式。
以上是关于NET问答: 如何检查一个 string 是否为有效的 url 格式?的主要内容,如果未能解决你的问题,请参考以下文章
NET问答: C# 中是否有 format json 的类库?
NET问答: 如何集中化统一验证 Authorization
NET问答: String 和 string 到底有什么区别?