2012-01-06 346 views
2

這一直讓我瘋狂。正則表達式的URL白名單

我需要構建一個URL的白名單的正則表達式的單個表達式,以允許我的網站鏈接到。 他們應該是這樣的形式:

*.microsoft.com/* 

所以下面的網址是有效的:

http://digital.microsoft.com/audio/somefile.wmv 
http://sharepoint.microsoft.com/pages/p1 

與以下無效:

http://badsite.microsoft.com.me 
http://www.microsoft.com.me/runthis 

我需要一個正則表達式的表達,這將使有效微軟網站進行鏈接,但阻止我提交鏈接的單詞microsoft.com在他們的惡意網站。

任何幫助表示讚賞!

UPDATE

基於由@ruakh答案,我能夠調整表達式匹配我的情況:我 將迎來他作爲答案。

表達:^([a-z|A-Z])+?://([^/]+[.])?(microsoft[.]com|MICROSOFT[.]COM)?(/.*)?$

此表達式正確匹配下面:

  • http://test.microsoft.com/?page=1http://msevents.microsoft.com
  • https://myevents.microsoft.com/somesubsite/Event.aspx?EventID=56456&Culture=en-US
  • mms://digital.microsoft.com/456/videos/23800_str.wmv
  • http://go.microsoft.com/?linkid=9775098
  • http://GO.MICROSOFT.COM/?linkid=9775098

,正確不匹配以下:

  • http://me.microsoft.com.au
  • http://microsoft.com.mysite.com
  • http://microsoft.com.mysite.com/blah
  • mms://microsoft.com.mysite.com
+0

你有有效的微軟ccSLD的列表(microsoft.com.au,microsoft.com.tr等)? – 2012-01-06 23:12:03

+0

@Greg,我已經廣泛搜索這個網站,並沒有找到類似於我的帖子。我很久以前使用了RegEx,並且因爲時間緊迫而想要一些我可以快速插入的東西。 – 2012-01-06 23:25:11

+0

@現在,我會很高興與其中的* microsoft.com *匹配的網址。謝謝。 – 2012-01-06 23:25:48

回答

2

,我認爲這將是更好使用URL解析庫,但由於你說你需要「一個單個正則表達式」(我的重點),我認爲,對於一些外部驅動的原因,你真的需要在正則表達式中做到這一點?在這種情況下,我可能會寫類似:

^(https?|mms)://([^/]+[.])?(?i:microsoft[.]com)(/.*)?$
+0

我需要使用RegEx的原因是,可以獨立於發佈來修改過濾器(表達式將保存在數據庫中)。 爲了澄清負面檢查,我的重點是確實試圖確保網站URL以microsoft.com結尾,而不是明確檢查擴展的結束。 所以我要確保這是一個有效的URL: http://media.microsoft.com/assetid=1234 和停止這樣的: www.microsoft.com.fakesite.com/pageid=123 謝謝迄今爲止的答覆。 – 2012-01-06 23:32:37

+0

我調整了上面的腳本以刪除負面檢查,目前它看起來很好: '^ https?://([^ /] + [。])?microsoft [。] com?(/.*) ?$' 哎呀輪輻太快,我也有這種類型的URL: 彩信://digital.microsoft.com/events/videos/media.wmv 我怎樣才能讓所有協議(或者我應該甚至不屑檢查)? – 2012-01-06 23:47:10

+0

確定用最終的調整表達式更新了主要問題。 – 2012-01-07 00:16:30

1

有點更復雜的正則表達式:^([a-z|A-Z])+?://([^/?#]+[.])?(microsoft[.]com|MICROSOFT[.]COM)?(/.*)?$

,如果你也不想匹配:

http://go.something.com?go.microsoft.com 
http://go.something.com?param=go.microsoft.com 
http://go.something.com#go.microsoft.com