2012-12-17 42 views
1

我有一個表單,用戶進入那裏的網站。問題是一些用戶把他們的電子郵件地址放在我不想要的地方。我想要一種方法來檢查網址是否結構良好。例如沒有@,必須有一個根域。 www子域是可選的。我無法在任何地方找到它。驗證網站字符串c#

我已經試過這個代碼

if (!Uri.TryCreate("http://" + websiteurl, UriKind.Absolute, out uri) || null == uri) 

返回出錯假,但我的問題是,它仍然沒有驗證根域例如我可以放在

http://websitename 

並驗證罰款,我不想要。它確實返回假時,我已經投入

http://[email protected] 

有沒有辦法我可以克服這個問題?我還添加了

http://在passthrough值中,因爲url永遠不會被驗證。

+0

需要注意的是,'@'是URL的有效字符。 –

+0

也許技術性太強? string.contains? – Sayse

+0

也''http:// websitename'也是一個有效的URL,例如'http:// localhost'。 – Matthew

回答

1

根據您的性能需求,可能會發出一個快速的HttpWebRequest作爲他們提供的網址,並驗證您是否收到成功響應可能是一個不錯的選擇。

+0

看起來像一個非常大的錘子來破解一個非常小的堅果,你不同意嗎? – KingCronus

+0

@KingCronus - 同意,但確實具有不僅確保網址有效,而且網站確實存在的優勢。 –

+0

雖然@KingCronus –

5

您可以使用:

Uri.IsWellFormedUriString(inputUrl, UriKind.RelativeOrAbsolute) 
0

你可以使用正則表達式嘗試。

+0

我認爲正則表達式可能會導致更多問題。也許我們需要檢查特定域的功能/方法,例如.com /.net和一個正則表達式,只允許字母數字值和字符,如 - 。 ? = –

0

Uri.IsWellFormattedUriString不會解決這裏的問題,其中包括區分有效Url和電子郵件地址的能力。兩者都格式良好的Uris。

使用正則表達式。下面是一個使用C#的MS論壇:

Url validation with Regular Expression

但你真的應該驗證此之前,它被髮送到服務器。如果你使用Peter Blum驗證器,他已經爲你完成了這項工作。

Peter Blum's Validators

或者,如果你希望把自己的JavaScript文件,看看這個StackOverflow的線程。

Url Validation using jQuery

+0

儘管在這種情況下,如果你正在驗證很多URL,Uri並不是非常重要。IsWelFormedUriString比未編譯的RegEx快100倍,比編譯RegEx快10倍(實際性能當然取決於具體的正則表達式)。但它具有作爲單行代碼的進一步優勢。 – Pete

+0

同意,皮特。我可以撰寫關於RegEx如何在關鍵路徑上被濫用並殺死業績的恐怖故事。僅作爲最後的手段使用。這裏的具體問題是他需要確保它是一個網站地址。我會在客戶端使用jQuery函數來解決問題。 - 乾杯 – PeterB