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)
一些可能有用的信息:
与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.
Windows 7 IE11示例: Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko
使用正则表达式模式
(?:\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)
| 归档时间: |
|
| 查看次数: |
8047 次 |
| 最近记录: |