我把这个正则表达式放在一起,它只返回用户代理字符串为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).*$
。