如何检查uri字符串是否有效(您可以将其提供给Uri构造函数)?
到目前为止,我只有以下内容,但由于显而易见的原因,我更喜欢不那么粗野的方式:
Boolean IsValidUri(String uri)
{
try
{
new Uri(uri);
return true;
}
catch
{
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试了Uri.IsWellFormedUriString,但它似乎并不喜欢你可以在构造函数中抛出的所有内容.例如:
String test = @"C:\File.txt";
Console.WriteLine("Uri.IsWellFormedUriString says: {0}", Uri.IsWellFormedUriString(test, UriKind.RelativeOrAbsolute));
Console.WriteLine("IsValidUri says: {0}", IsValidUri(test));
Run Code Online (Sandbox Code Playgroud)
输出将是:
Uri.IsWellFormedUriString says: False
IsValidUri says: True
Run Code Online (Sandbox Code Playgroud)
更新/应答
Uri构造函数默认使用类Absolute.当我尝试使用Uri.TryCreate和构造函数时,这导致了差异.如果匹配构造函数和TryCreate的UriKind,则会获得预期的结果.
在Regex.IsMatch特定字符串上使用(C#,.Net 4.5)时,CPU达到100%.
串:
https://www.facebook.com/CashKingPirates/photos/a.197028616990372.62904.196982426994991/1186500984709792/?type=1&permPage=1
Run Code Online (Sandbox Code Playgroud)
图案:
^http(s)?://([\w-]+.)+[\w-]+(/[\w- ./?%&=])?$
Run Code Online (Sandbox Code Playgroud)
完整代码:
Regex.IsMatch("https://www.facebook.com/CashKingPirates/photos/a.197028616990372.62904.196982426994991/1186500984709792/?type=1&permPage=1",
@"^http(s)?://([\w-]+.)+[\w-]+(/[\w- ./?%&=])?$");
Run Code Online (Sandbox Code Playgroud)
我发现编辑URL可以防止出现此问题.编辑的URL:
https://www.facebook.com/CashKingPirates/photos/a.197028616990372.62904.196982426994991/1186500984709792
Run Code Online (Sandbox Code Playgroud)
但仍然非常有兴趣了解导致这种情况的原因.
我正在使用带有此代码的.net 2010 c#windows应用程序:检查有效Uri与否
码:
static bool IsValidUrl(string urlString)
{
Uri uri;
return Uri.TryCreate(urlString, UriKind.Absolute, out uri)
&& (uri.Scheme == Uri.UriSchemeHttp
|| uri.Scheme == Uri.UriSchemeHttps
|| uri.Scheme == Uri.UriSchemeFtp
|| uri.Scheme == Uri.UriSchemeMailto
);
}
Run Code Online (Sandbox Code Playgroud)
问题:如果我验证这个http://http://www.Google.com我得到它的有效但当我尝试使用IE时它没有显示任何网站.
有没有办法找出String是否有效uri?(没有使用正则表达式和互联网访问)