C# IE用户代理regexp(包括IE11和compat视图)
我需要您的帮助,为用户代理字符串创建一个特定于IE的正则表达式。我的目标是获得正确的IE版本(包括IE11),并检查浏览器是否运行“Compat View” 例如,我对IE9在正常模式下的期望结果:C# IE用户代理regexp(包括IE11和compat视图),c#,regex,internet-explorer,user-agent,C#,Regex,Internet Explorer,User Agent,我需要您的帮助,为用户代理字符串创建一个特定于IE的正则表达式。我的目标是获得正确的IE版本(包括IE11),并检查浏览器是否运行“Compat View” 例如,我对IE9在正常模式下的期望结果:IE9.0 “Compat视图”中的IE9:IE 9.0 CV 当不考虑compat视图时,此模式适用于IE 10: MSIE([0-9]{1,}[\.0-9]{0,}) 但是,compat视图中的IE9将有一个类似于的用户代理字符串。。。MSIE7.0。。。Trident/5.0。此外,IE11将不
IE9.0
“Compat视图”中的IE9:IE 9.0 CV
当不考虑compat视图时,此模式适用于IE 10:
MSIE([0-9]{1,}[\.0-9]{0,})
但是,compat视图中的IE9将有一个类似于的用户代理字符串。。。MSIE7.0。。。Trident/5.0
。此外,IE11将不再在字符串中使用MSIE
(参见下面的示例)
我对正则表达式不太了解,所以我需要你帮我弄一下这个模式。虽然我认为三叉戟模式应该很明显,/trident\/\d/
我将在C#中使用它,因此我想我需要这样做(欢迎建议):
一些可能有用的信息: : 与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”的增量Trident令牌允许网站区分在Compat视图中运行的IE9和在Compat视图中运行的IE8。 Windows 7 IE11示例:
Mozilla/5.0(Windows NT 6.1;Trident/7.0;rv:11.0)与Gecko类似
使用正则表达式模式
(?:\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
为什么需要浏览器版本?你不能使用功能检测吗?@CodeCaster我想跟踪我的应用程序中使用的IE版本。我不想为此使用功能检测(例如,没有activeX==IE11)。谢谢,但这在compat视图中如何区分IE9和IE9呢?在后一种情况下,它只会给我IE7…也许我应该发布一个关于这个的新问题,但是MSIE([^;]*)|Trident.*如何;rv([0-9.]+)
。MSIE部件最多可匹配10个,否则将匹配trident+rv版本请注意CV中的7->IE 11不正确。考虑这个IE11字符串,而不是在CV <代码> Mozilla / 5(Windows NT 6.1;WOW64;三叉戟/ 7;RV:11),像壁虎< /代码> @ Johan -我是对的,你是错误的。非CV中IE11的用户代理字符串将与CV的我的正则表达式模式不匹配,因为MSIE部分不存在。@Johan-请参阅
4 -> IE 8 in CV
5 -> IE 9 in CV
6 -> IE 10 in CV
7 -> IE 11 in CV