这让我发疯了。
我需要构建一个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
答案 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