2009-12-15 60 views
1

C#正則表達式如何由單一的正則表達式驗證網址:極品URL驗證

http://83.222.4.42:8880/listen.pls 
http://www.my_site.com/listen.pls 
http://www.my.site.com/listen.pls 

是真的嗎?

我看到我提出的問題不完全:(對不起,我的錯誤。想法是,我想驗證與regexp有效的URL的幫助,讓它是一個外部IP地址或域名。這個想法,其他有效的URL可以考慮:?

http://93.122.34.342/ 
http://193.122.34.342/abc/1.html 
http://www.my_site.com/listen2.pls 
http://www.my.site.com/listen.php 

+2

有沒有這樣的事情作爲「C#正則表達式」;正則表達式是一個正則表達式,對嗎?爲了得到你想要/需要的答案,最好是更全面地指定你的問題。 – peSHIr 2009-12-15 08:41:04

+0

我們需要更多地瞭解您想要匹配的模式。 3個例子是不夠的。形容它。 – 2009-12-15 08:48:32

+5

有很多稍微不同的正則表達式的風格,所以指定c#是一個好主意 – 2009-12-15 08:55:29

回答

1

你的意思是用/listen.pls結尾的網址在這種情況下,試試這個:

^http://[^/]+/listen\.pls$ 

或者如果協議標識符必須是選擇性的:

^[http://]?[^/]+/listen\.pls$ 

反正這裏看看,也許對你有用:Url and Email validation using Regex

+1

如果URL包含目錄,則不起作用。包含拼寫錯誤「.ps」 - >「.pls」。 – 2009-12-15 08:21:21

+0

不完全是,我重新提出了這個問題,看看我編輯過的東西。 – diadiora 2009-12-16 10:34:11

1
/^http:\/\/[-_a-zA-Z0-9.]+(:\d+)?\/listen\.pls$/ 
+0

與第一個不匹配 – 2009-12-15 08:19:52

+0

@twaltari:啊,謝謝。我修好了它。 – Asaph 2009-12-15 08:38:03

+0

不完全是我想要的,對不起我的錯誤,我重新提出了這個問題,看看我編輯過的內容。 – diadiora 2009-12-16 10:34:43

1

^HTTP://.+/listen \ .PLS $

+1

您可以在答案中添加更多細節嗎?雖然簡短的答案可能有助於指出正確的方向,但有助於進一步解釋。 – bjb568 2014-08-05 19:12:53

+0

任何以「http://」開頭並以「/listen.pls」結尾的內容 – 2014-08-08 07:51:08

1

如果嚴格只有3個不打擾正則表達式,因爲當一切都已經嚴格知道時,不一定有很好的模式匹配 - 事實上,您可能會意外地匹配更多如果網址是用於安全目的,或者同等重要的話,這會成爲問題。相反,直接測試三種情況 - 也許把它們放在配置文件中。

未來,如果您想向列表中添加更多網址,您可能會得到一個日益難以維護的過於複雜的正則表達式,並會取代簡單的小列表檢查。

通過運行Regex找到這三個字符串,您不一定會獲得速度提升 - 事實上它可能相當昂貴。

注意:如果你想讓Uri正則表達式也嘗試託管圖書館的網站,如Regex Library - 如果你的需求發生變化,有很多選擇。

7

地獄之路鋪滿了字符串解析。

URL解析特別是許多被利用的安全問題的來源。不要這樣做。

例如,你想讓它匹配嗎?

 
    

注意大寫方案部分。請記住,URL的某些部分區分大小寫,有些則不區分大小寫。然後是編碼規則。等等。

開始使用System.Uri解析您提供的網址:

var uri = new Uri("http://83.222.4.42:8880/listen.pls"); 

然後,你可以寫的東西,如:

if (uri.Scheme == "http" && 
    uri.Host == "83.222.4.42" && 
    uri.AbsolutePath == "/listen.pls" 
    ) 
{ 
    // ... 
} 
0

Jay Bazuzi's solution修改後的版本的基礎之上,因爲我不能發佈代碼在評論中,它會檢查一個列入黑名單的擴展名(我這樣做只是爲了演示目的,您應該強烈建議構建一個白名單而不是黑名單):

string myurl = "http://www.my_site.com/listen.pls"; 
Uri myUri = new Uri(myurl); 
string[] invalidExtensions = { 
    ".pls", 
    ".abc" 
}; 

foreach(string invalidExtension in invalidExtensions) { 
    if (invalidExtension.ToLower().Equals(System.IO.Path.GetExtension(myUri.AbsolutePath))) { 
     //Logic here 
    } 

}