我把这个正则表达式放在一起,它只返回用户代理字符串为IE 5、6、7和8的匹配项。显然,这里的主要目标之一是避免混淆IE11用户代理字符串。

此正则表达式有效(我错过了什么)吗?

.*MSIE [5-8]\b((?!Trident/4.0)).*


更新

下面与5、6、7和8的所有用户代理字符串匹配。与9、10的所有用户代理字符串都不匹配。但是,它与IE11匹配,但从.Net使用Request.UserAgent返回。

'Mozilla / 4.0(兼容; MSIE 7.0; Windows NT 6.3; WOW64; Trident / 7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729 )'

^.*MSIE [5-8](?:\.[0-9]+)?(?!.*Trident\/6\.0\)).*$

最佳答案

这是list of user agent strings across IE versions。要验证IE 5、6、7和8用户代理字符串,只需要在最后检查“ Trident / 6.0)”即可。

使用此正则表达式:^.*MSIE [5-8](?:\.[0-9]+)?(?!.*Trident\/[5-9]\.0).*$

请参见regex101 example

编辑:

根据MSDN User Agent documentation


使用F12开发人员工具更改浏览器模式时
Internet Explorer,用户代理字符串的版本标记为
修改为显示,以便浏览器看起来是更早的版本
版。

这样做是为了允许提供浏览器特定的内容
到Internet Explorer,通常只有在网站具有
未更新以反映浏览器的当前版本。

发生这种情况时,会将Trident令牌添加到用户代理字符串中。

该令牌包含一个版本号,无论当前使用哪种浏览器模式,都可以使用该版本号识别浏览器的版本。


Token         Description
Trident/7.0   IE11
Trident/6.0   Internet Explorer 10
Trident/5.0   Internet Explorer 9
Trident/4.0   Internet Explorer 8


因此,正则表达式应检查MSIE版本是否未跟随“ Trident / 5.0”(最高为“ Trident / 7.0”):^.*MSIE [5-8](?:\.[0-9]+)?(?!.*Trident\/[5-9]\.0).*$。发布“ Trident / 10” +时,有必要对其进行更新。或者,这里是:
^.*MSIE [5-8](?:\.[0-9]+)?(?!.*Trident\/(?:[5-9]|1[0-9])\.0).*$

08-17 15:34