Regex 正则表达式检查IE版本

Regex 正则表达式检查IE版本,regex,Regex,我需要阻止IE版本高达6。对于用户代理字符串,我编写了一个regex来阻止IE 4 5和6。但我遇到了这样一条线: Mozilla/4.0(兼容;MSIE 8.0;Windows NT 5.1;Trident/4.0;TheFreeDictionary.com;FunWebProducts;FBSMTWB;GTB6;Mozilla/4.0(兼容;MSIE 6.0;Windows NT 5.1;SV1);InfoPath.2) 在这个字符串中,提到了mise6.0,所以我的正则表达式阻止了它。然而

我需要阻止IE版本高达6。对于用户代理字符串,我编写了一个regex来阻止IE 4 5和6。但我遇到了这样一条线:

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


在这个字符串中,提到了mise6.0,所以我的正则表达式阻止了它。然而,它实际上是IE8浏览器。那么,我如何构造一个正则表达式来扫描大于6的IE,如果IE 4-5-6再次出现在字符串中,它将忽略它。

您是否合理地将自己限制为一个正则表达式?你能创建一组regexp来确定通过/失败模式吗?

我相信你已经听过无数次了,研究
userAgent
——一种称为“浏览器嗅探”的过程——并不能可靠地工作。浏览器可以并且确实可以随时以任何方式更改该字符串。通过忘记
userAgent
而改用,您可以避免几天的失败和无休止的蹩脚解释,这不需要对
regex
进行无意义的调用,并产生可靠的结果。(请阅读更多信息。)

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


HTH

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


浏览器嗅探受到了不好的评价,有时它是合理的。。使用UA嗅探检测新浏览器不是一个好主意。但是,如果你试图检测IE5、6、7,很有可能它不会成为一个问题

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

对我有效

经过大量测试,出现了这种情况。这个特定的用户代理字符串中有多个IE版本的标记。现在,我想阻止这种特殊类型的用户代理字符串。我想在一个正则表达式中完成它。我试着按照你的要求去做。但是我已经被指示最小化正则表达式。你用什么语言来做这个?可能有比正则表达式更好的解决方案。可能还有比浏览器版本检测更好的解决方案。哦……坦白说,我对浏览器检测的场景还不太熟悉,对此我一无所知。我会记住你说的话,谢谢你。您希望使用浏览器检测的一个原因是。IE9中突然出现了一个bug,解决它的方法是更改行高度。但只有在IE9中。当然,你可以使用html IE检测器标记。在Javascript中,除非我将表达式传递给
new RegExp
,而不使用单引号(即不作为字符串),否则在IE9中不会得到匹配项,在这种情况下,我可以说
var re=/MSIE([0-9]{1,}[.0-9]{0,})/g注意:IE 11的用户代理字符串中没有
MSIE
var re = new RegExp('/MSIE ([0-9]{1,}[.0-9]{0,})/g');
if(re.exec(userString) != null) {
   version = parseFloat(RegExp.$1);
}
preg_match_all('/(MSIE\s?)(6|7)[\.0-9]{0,}/',$_SERVER['HTTP_USER_AGENT'], $matches);