Lou*_*hys 232 .net c# validation url uri
有Uri.IsWellFormedUriString和Uri.TryCreate方法,但它们似乎返回true文件路径等.
如何检查字符串是否是用于输入验证的有效(不一定是活动的)HTTP URL?
小智 404
尝试此操作来验证HTTP URL(uriName是您要测试的URI):
Uri uriResult;
bool result = Uri.TryCreate(uriName, UriKind.Absolute, out uriResult)
&& uriResult.Scheme == Uri.UriSchemeHttp;
Run Code Online (Sandbox Code Playgroud)
或者,如果您要同时接受HTTP和HTTPS URL(根据J0e3gan的评论):
Uri uriResult;
bool result = Uri.TryCreate(uriName, UriKind.Absolute, out uriResult)
&& (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps);
Run Code Online (Sandbox Code Playgroud)
Kis*_*ath 85
此方法在http和https中均可正常工作.只需一行:)
if (Uri.IsWellFormedUriString("https://www.google.com", UriKind.Absolute))
Run Code Online (Sandbox Code Playgroud)
Erç*_*ğlu 22
public static bool CheckURLValid(this string source)
{
Uri uriResult;
return Uri.TryCreate(source, UriKind.Absolute, out uriResult) && uriResult.Scheme == Uri.UriSchemeHttp;
}
Run Code Online (Sandbox Code Playgroud)
用法:
string url = "htts://adasd.xc.";
if(url.CheckUrlValid())
{
//valid process
}
Run Code Online (Sandbox Code Playgroud)
更新:(单行代码)感谢@GoClimbColorado
public static bool CheckURLValid(this string source) => Uri.TryCreate(source, UriKind.Absolute, out Uri uriResult) && uriResult.Scheme == Uri.UriSchemeHttps;
Run Code Online (Sandbox Code Playgroud)
用法:
string url = "htts://adasd.xc.";
if(url.CheckUrlValid())
{
//valid process
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*cas 12
试试看:
bool IsValidURL(string URL)
{
string Pattern = @"^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+$";
Regex Rgx = new Regex(Pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase);
return Rgx.IsMatch(URL);
}
Run Code Online (Sandbox Code Playgroud)
它将接受这样的 URL:
这里所有的答案,或者允许与其他方案的网址(例如file://,ftp://)或拒绝人类可读的网址不启动http://或https://(例如www.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;
}
Run Code Online (Sandbox Code Playgroud)
用法:
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);
}
Run Code Online (Sandbox Code Playgroud)
输出:
True https://www.google.com/
True http://www.google.com/
True http://www.google.com/
True http://google.com/
False
Run Code Online (Sandbox Code Playgroud)
作为使用正则表达式的另一种方法,此代码使用Uri.TryCreate每个 OP,但随后还会检查结果以确保其方案是 http 或 https 之一:
bool passed =
Uri.TryCreate(url, UriKind.Absolute, out Uri uriResult)
&& (uriResult.Scheme == Uri.UriSchemeHttp
|| uriResult.Scheme == Uri.UriSchemeHttps);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
166982 次 |
| 最近记录: |