正则表达式检查IE版本

时间:2011-09-14 10:40:05

标签: regex

我需要阻止IE版本高达6.对于用户代理字符串我写了一个正则表达式阻止IE 4 5和6.但我遇到了这个字符串:

Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; TheFreeDictionary.com; FunWebProducts; FBSMTWB; GTB6; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; InfoPath.2)

在这个字符串中,提到了MISE 6.0,所以我的正则表达式阻止了它。然而它实际上是IE 8浏览器。那么我怎样才能构建一个扫描IE大于6的正则表达式,如果IE 4-5-6再次出现在字符串中,它将忽略它。

4 个答案:

答案 0 :(得分:2)

不要查找要阻塞的MSIE 6.0的出现,使用以下代码检测版本为浮点数:(您没有指定语言,所以我在PHP中给出了示例)

preg_match( '/MSIE ([0-9]{1,}[\.0-9]{0,})/', $userAgent, $matches );
$version = float( $matches[1] );
if( $version <= 6.0 ) {
    // BLOCK
}

上面的代码将使用第一次出现MSIE x.x来检测版本,并​​忽略其余部分。

<强>更新

在Javascript中:

var re = new RegExp('/MSIE ([0-9]{1,}[.0-9]{0,})/g');
if(re.exec(userString) != null) {
   version = parseFloat(RegExp.$1);
}

答案 1 :(得分:1)

我确信你已经听过无数次调查userAgent - 称为“浏览器嗅探”的过程 - 无法可靠地运行。浏览器可以并且确实随时随地更改该字符串。你可以忘记userAgent而不是使用object detection,而不需要对regex进行无意义的调用,并产生可靠的结果,从而节省数天的失败和无尽的蹩脚解释。 (了解有关browser detection的更多信息。)

您可能需要考虑使用除嗅探之外的浏览器检测方法。

HTH

答案 2 :(得分:0)

您是否合理地限制自己只使用一个正则表达式?你能创建一个 set 的正则表达式来确定通过/失败模式吗?

答案 3 :(得分:0)

浏览器嗅探得到一个糟糕的说唱,有时它是合理的..使用UA嗅探检测新浏览器不是一个好主意。但是如果你试图检测IE5,6,7,那么它很有可能不会出现问题。

preg_match_all('/(MSIE\s?)(6|7)[\.0-9]{0,}/',$_SERVER['HTTP_USER_AGENT'], $matches);

为我工作