Tất cả các câu trả lời ở đây hoặc là cho phép các URL với các chương trình khác (ví dụ, file://
, ftp://
) hoặc từ chối URL con người có thể đọc được mà không bắt đầu với http://
hoặc https://
(ví dụ www.google.com
) mà là không tốt khi giao dịch với đầu vào người sử dụng .
Đây là cách tôi làm điều đó:
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;
}
Sử dụng:
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);
}
Đầu ra:
True https://www.google.com/
True http://www.google.com/
True http://www.google.com/
True http://google.com/
False