4

我需要使用用户代理字符串检测 IE7(和 IE6):

我做了以下正则表达式:

navigator.userAgent.match(/MSIE [67]\./)

但是,IE9 在 quirks 模式下也将正则表达式与以下用户代理匹配:

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

有没有办法可以将它们组合成一个?

4

3 回答 3

3

假设 Trident 部分总是在 MSIE 部分之后,您可以使用前瞻:

/MSIE [67]\.(?!.*Trident[5]\.0)/

我不熟悉用户代理字符串,但我猜也许 IE10 在 quirks 模式下的 Trident 版本可能 > 5,因此您可以将其更改为:

/MSIE [67]\.(?!.*Trident[1-9])/

更新:第二个正则表达式也被编辑以包括早期版本的 Trident,例如 IE8 中的 Trident/4.0,以及潜在的更高版本 >= 10。

UPDATE2:清理正则表达式在 javascript 中有效。

于 2012-06-19T23:20:29.717 回答
0

我正在发布一个与正则表达式一起制作的 JavaScript 解决方案......

function getInternetExplorerVersion()
// Returns the version of Internet Explorer or a -1
// (indicating the use of another browser).
{
  var rv = -1; // Return value assumes failure.
  if (navigator.appName == 'Microsoft Internet Explorer')
  {
    var ua = navigator.userAgent;
    var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
    if (re.exec(ua) != null)
      rv = parseFloat( RegExp.$1 );
  }
  return rv;
}
function checkVersion()
{
  var msg = "You're not using Internet Explorer.";
  var ver = getInternetExplorerVersion();

  if ( ver > -1 )
  {
    if ( ver >= 8.0 ) 
      msg = "You're using a recent copy of Internet Explorer."
    else
      msg = "You should upgrade your copy of Internet Explorer.";
  }
  alert( msg );
}

这个解决方案其实是我的微软给的,可以参考这个链接

于 2012-05-16T08:20:10.657 回答
0

document&&document.documentMode?document.documentMode:variable也许不相关,但为什么不尝试variable根本不是 IE 的标识符呢?

于 2014-11-19T09:49:02.273 回答