IE用户代理正则表达式(包括IE11和紧凑视图)

时间:2013-11-14 20:13:52

标签: c# regex internet-explorer user-agent

我需要您的帮助为用户代理字符串创建IE特定的正则表达式。我的目标是获得正确的IE版本(包括IE11),并检查浏览器是否正在运行“Compat View”。

因此,例如,我在正常模式下对IE9的期望结果:IE 9.0 和“Compat View”中的IE9:IE 9.0 CV

当不考虑compat视图时,此模式适用于最高IE 10: MSIE ([0-9]{1,}[\.0-9]{0,})

但是,compat视图中的IE9将具有类似于... MSIE 7.0 ... Trident/5.0的用户代理字符串。此外,IE11将在字符串中完全使用MSIE(参见下面的示例)。

我不太了解正则表达式,所以我需要你对模式的帮助。虽然我认为三叉戟模式应该非常明显,/Trident\/\d/

我将在C#中使用它,所以我想我需要做这样的事情(建议欢迎):

var regex = new Regex(@"MSIE ([0-9]{1,}[\.0-9]{0,})");
var match = regex.Match(Request.UserAgent);
if (match.Success)
    //handle match.Groups

一些可能有用的信息:

IE9's user agent string

  

与IE8类似,IE9的兼容性视图将映射到IE7标准模式,而兼容性视图中的IE9的UA字符串将是:

     

Mozilla / 4.0(兼容; MSIE 7.0; Windows NT 6.0; Trident / 5.0)   在兼容性视图中,IE9通过应用程序版本号(Mozilla / 4.0)和版本令牌(MSIE 7.0)将自身报告为IE7。这样做是为了兼容性。 增加的Trident令牌,从“Trident / 4.0”到“Trident / 5.0”,允许网站区分在Compat View中运行的IE9和在Compat View中运行的IE8。

IE11's user agent string:

Windows 7 IE11示例:Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko

Similar useful thread

1 个答案:

答案 0 :(得分:8)

使用正则表达式

(?:\b(MS)?IE\s+|\bTrident\/7\.0;.*\s+rv:)(\d+)

您匹配所有当前已知的IE浏览器用户代理字符串以及IE的组#1确定版本中的数字匹配(如果未在兼容性视图中运行)。


要查看IE是否在兼容性视图中运行,请查找匹配

\bMSIE\s+7\.0;.*\bTrident\/(\d+)\.0

组#1中的数字匹配(在关键字“Trident”之后)在兼容性视图中确定IE的版本如下:

4 -> IE  8 in CV
5 -> IE  9 in CV
6 -> IE 10 in CV
7 -> IE 11 in CV