2012-01-06 124 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