NET问答: 如何检查一个 string 是否为有效的 url 格式?
生活随笔
收集整理的這篇文章主要介紹了
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 格式?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 要来吗,不错的WPF技术交流群!(大批干
- 下一篇: Dapr + .NET 实战(十四)虚拟