IE用户代理regexp(inclidung IE11和compat视图)

Joh*_*han 2 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
Run Code Online (Sandbox Code Playgroud)

一些可能有用的信息:

IE9的用户代理字符串:

与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/4.0"到"Trident/5.0"的递增三叉戟令牌允许网站区分在Compat View中运行的IE9和在Compat View中运行的IE8.

IE11的用户代理字符串:

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

类似有用的线程

Ωme*_*ega 8

使用正则表达式模式

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

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


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

\bMSIE\s+7\.0;.*\bTrident\/(\d+)\.0
Run Code Online (Sandbox Code Playgroud)

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

4 -> IE  8 in CV
5 -> IE  9 in CV
6 -> IE 10 in CV
7 -> IE 11 in CV
Run Code Online (Sandbox Code Playgroud)