3

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

因此,例如,我在正常模式下对 IE9 的期望结果:IE 9.0 以及在“兼容视图”中的 IE9:IE 9.0 CV

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

但是,兼容视图中的 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 的用户代理字符串

与 IE8 类似,IE9 的 Compatibility View 将映射到 IE7 Standards Mode,并且在 Compatibility View 中 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”的递增 Trident 令牌允许网站区分在 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

类似有用的线程

4

1 回答 1

12

使用正则表达式模式

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

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


要了解 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
于 2013-11-14T20:26:07.333 回答