URL白名单的正则表达式

时间:2012-01-06 22:43:50

标签: regex

这让我发疯了。

我需要构建一个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。

感谢任何帮助!

更新

基于@ruakh的回答,我能够调整表达式以匹配我的场景: 我会将他的帖子标记为答案。

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

此表达式正确匹配以下内容:

  • http://test.microsoft.com/?page=1 http://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

2 个答案:

答案 0 :(得分:2)

我认为使用URL解析库会更好,但是因为你说你需要“一个单个正则表达式”(强调我的),我认为,对于某些外部 - 驱动的原因,你真的需要在正则表达式中这样做吗?在那种情况下,我可能会写一些类似的东西:

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

答案 1 :(得分: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