我需要使用用户代理字符串检测 IE7(和 IE6):
我制作了以下正则表达式:
navigator.userAgent.match(/MSIE [67]\./)
然而,IE9 在怪癖模式下也匹配正则表达式与以下 user agent :
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 7.1; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C)
我可以制作两个正则表达式:
navigator.userAgent.match(/MSIE [67]\./) !== null
&& navigator.userAgent.match(/Trident\/5\.0/) === null
有什么办法可以将它们合二为一吗?
最佳答案
假设 Trident 部分总是在 MSIE 部分之后,您可以使用先行:
/MSIE [67]\.(?!.*Trident[5]\.0)/
我不熟悉用户代理字符串,但我猜也许 IE10 在 quirks 模式下的 Trident 版本可能 > 5,因此您可以将其更改为:
/MSIE [67]\.(?!.*Trident[1-9])/
更新:第二个正则表达式被编辑为也包括较早版本的 Trident,例如IE8 中的 Trident/4.0,以及可能的更新版本 >= 10。
更新 2:清理正则表达式以使其在 javascript 中有效。
关于javascript - 如何通过用户代理字符串检测 IE7,忽略以怪异模式运行的较新 IE 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10596813/