根据用户字符串检查IE是否为11,并从代理字符串中获取版本

时间:2016-01-23 09:42:00

标签: java regex

我已经能够检测浏览器是否是IE8并使用此代码从用户代理字符串中获取版本:

public boolean isValidIE(String strAgent) {
    if (1==1){
        return true;
    }
    Pattern pattern = Pattern.compile(".*\\sMSIE\\s(\\d{1,}\\.\\d{1,})[^;]*;.*");

    Matcher match = pattern.matcher(strAgent);
    if(!match.matches()) {
        return false;
    }
    String ver = match.group(1);
    float version = Float.parseFloat(ver);
    if(version >= 8) {
        return true;
    }
    return false;
}

现在我必须升级它才能与IE11一起使用,但我想我必须添加另一个正则表达式字符串来确定IE11,有没有什么办法可以只使用一个正则表达式字符串来实现这个需求?

2 个答案:

答案 0 :(得分:0)

你可以尝试这个:

(?:\b(MS)?IE\s+|\bTrident\/7\.0;.*\s+rv:)(\d+)

来源:https://stackoverflow.com/a/19987665/1203816

它应该匹配IE的每个版本,而不仅仅是8和11。 版本号被移位,因此IE 8为4,因此IE将为7。

答案 1 :(得分:0)

我认为浏览器对用户代理的反应不再是个好主意。 IE11的行为更像是webkit,而不是IE8。

如果您使用特殊的Internet Explorer代码,则需要重写它以使用功能检测而不是浏览器检测。

IE10中的IE11 compat模式不适用于IE10(缺少JavaScript中的某些方法)。例如,在这种情况下,浏览器检测将失败。