0

我有一个正则表达式试图查看浏览器是否为 IE 9 或更高版本。我有一个正则表达式,如果它是 IE 9 而不是 IE 10,它可以识别。

努力识别 IE 9:MSIE ([0-9]{1,}[\.0-9]{0,})

一些 IE 10 用户代理文本:Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)

正则表达式目前无法识别 IE 9 或 10:MSIE ^(?:0|[1-9][0-9]?)$

这是在 javascript 中完成的,所以这里是代码:

function IsIE9() {
    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,})");
        var re = new RegExp("MSIE ^(?:0|[1-9][0-9]?)$");
        if (re.exec(ua) != null)
            rv = parseFloat(RegExp.$1);
    }
    return parseInt(rv) >= 9;
}

有人可以帮我解决一个可以识别 IE 版本并返回数值的正则表达式(我不想在那里对 IE 值进行硬编码,因此不必为每个新的 IE 版本更新它。

- - 更新 - -

这两个答案似乎都有效。我用这个为我的正则表达式获取版本号:MSIE ((?:0|[1-9][0-9]?))它返回整数值。

4

2 回答 2

2

为什么不使用单个正则表达式提取版本号。我看了这里,似乎所有 IE 用户代理字符串的格式都是“MSIE vn;”。

var re = /MSIE ([^;]*)/; // stop at the following semi-colon
var agentString = "agent string here";
var version = re.exec(agentString)[1]; // [1] is the capture from ()

var majorVersion = version.split('.')[0]; // "9" or "10"

但是,根据您所做的事情,您可能需要考虑功能检测而不是浏览器嗅探。

于 2013-10-28T20:10:50.850 回答
0

删除^$,它们用于指示行的开始和结束

于 2013-10-28T20:06:36.050 回答