javascript - 如何通过用户代理字符串检测 IE7,忽略以怪异模式运行的较新 IE 版本

标签 javascript regex user-agent

我需要使用用户代理字符串检测 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/

相关文章:

c# - 复杂的正则表达式问题

javascript - 正则表达式在引号(和新行)之间的匹配中包含引号

css - 在 IE9 中查看源自用户代理样式表的 css 样式

java - Eclipse RAP 中的客户端渲染是如何完成的?

javascript - 我将如何使用 javascript 将包含两个城市(及其状态)的字符串分隔到它们自己的变量中?

java - 有没有解析用户代理字符串的好方法?

c# - 如何更改 HttpWebRequest 中 UserAgent 的编码?

javascript - Backbone 形式:选择字段的样式选项?

javascript - 如何用JS选择一个选择框的选项值?

javascript - 对 d3.v4 中的嵌套数据进行排序