我需要阻止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再次出现在字符串中,它将忽略它。
答案 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);
为我工作