如何检查字符串是否是有效的HTTP URL?

问题描述:

还有的Uri.IsWellFormedUriStringUri.TryCreate方法,但他们似乎回到true文件路径等如何检查字符串是否是有效的HTTP URL?

如何检查字符串是否是用于输入验证目的的有效(不一定有效)HTTP URL?

试试这个验证的HTTP URL(uriName是URI你想测试):

Uri uriResult; 
bool result = Uri.TryCreate(uriName, UriKind.Absolute, out uriResult) 
    && uriResult.Scheme == Uri.UriSchemeHttp; 

或者,如果你想接受HTTP和HTTPS作为有效(每J0e3gan的评论)网址:

Uri uriResult; 
bool result = Uri.TryCreate(uriName, UriKind.Absolute, out uriResult) 
    && (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps); 
+6

如果这种阅读uriResult.Scheme而不是uriName.Scheme?我正在使用TryCreate的重载,它接受String而不是Uri,因为它是第一个参数。 –

+7

您可能需要向uriResult.Scheme ==添加更多条件...具体为https。这取决于你需要什么,但是这个小小的改变是我需要完美的工作。 – Fiarr

+8

要明确每个@ Fiarr的评论,除了HTTP URL之外,需要考虑HTTPS的“小改动”是:'bool result = Uri.TryCreate(uriName,UriKind.Absolute,out uriResult)&& uriResult.Scheme == Uri .UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps;' – J0e3gan

经过Uri.TryCreate您可以检查Uri.Scheme以查看它是否是HTTP(s)。

这将返回布尔:

Uri.IsWellFormedUriString(a.GetAttribute("href"), UriKind.Absolute) 
+1

我认为OP特别提到,他不喜欢Uri.IsWellFormedUriString,因为它为文件路径提供了真实性。你有解决这个问题的办法吗? – Isantipov

Uri uri = null; 
if (!Uri.TryCreate(url, UriKind.Absolute, out uri) || null == uri) 
    return false; 
else 
    return true; 

这里url是你必须测试的字符串。

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 
} 
+0

这似乎没有处理www网址。 IE:www.google.com显示为无效。 –

+4

@ZauberParacelsus“www.google.com”无效。 URL的意思应该以“http”,“ftp”,“file”等字符开头。字符串应该是“http:// www.google.com”,不得有空格 –

此方法既http和https罚款。只有一行:)

if (Uri.IsWellFormedUriString("https://www.google.com", UriKind.Absolute)) 

MSDN:IsWellFormedUriString

+4

这将对非HTTP URI返回true(即[任何其他方案](https://msdn.microsoft.com/en-us/library/system.uri.scheme(v = vs.110).aspx),如'file://'或'ldap://'。 这个解决方案应该加上一个对照计划的检查 - 例如'if(uri.Scheme!= Uri.UriSchemeHttp && uri.Scheme!= Uri.UriSchemeHttps)...' – Squiggle

+4

失败17测试在这里:https:// dotnetfiddle。净/ XduN3A – Lee