使用JavaScript RegExp检测特定浏览器

时间:2014-04-17 16:02:53

标签: javascript regex

我有一些像这样的代码:

var versionPattern = new RegExp("^Firefox/[1]{1}[7-9]{1}|[2-9]{1}[0-9]{1}$");

if (navigator.userAgent.indexOf(versionPattern) > 0) {
        alert("Firefox Detected");
        return true;

我想检测Firefox 17及更高版本,但这段代码似乎无法正常工作。我该怎么做才能改进RegExp?

4 个答案:

答案 0 :(得分:1)

类似的东西:

navigator.userAgent.match(/Firefox\/([1]{1}[7-9]{1}|[2-9]{1}[0-9]{1})/);

请勿在RegExp中使用^,因为 Firefox 不是字符串的开头。 如果你想使用可选的17-19 | 20 - 99,它应该在()之间。

indexOf是在另一个字符串中找到字符串的第一个索引。

答案 1 :(得分:1)

您可以阅读userAgent字符串,匹配版本号 -

var bs=navigator.userAgent.match(/Firefox\/(\d+)/);
if(bs && parseInt(bs[1])>17) alert('Firefox '+bs[1]+' detected.')

答案 2 :(得分:0)

您可以使用*REGEX*.test('testString');测试正则表达式 它返回true / false。我可以找到类似" Firefox17" " Firefox22" ...通过这个正则表达式:/ ^(Firefox)[1] {1} [7-9] {1} | [2] {1} [0-9] {1} $所以你可以尝试: /^(Firefox)[1]{1}[7-9]{1}|[2]{1}[0-9]{1}$.test(navigator.userAgent)

答案 3 :(得分:-1)

您需要的变量是var majorVersion

  

下面的代码示例使用navigator.userAgent来实现浏览器   检测。它还使用navigator.appName和navigator.appVersion作为   只有最后的手段,如果userAgent字符串有一个"意外的"   格式。在浏览器中,此代码生成以下输出:

浏览器名称= Mozilla Firefox
完整版= 28.0
主要版本= 28
navigator.appName = Netscape
navigator.userAgent = Mozilla / 5.0(Windows NT 6.2; WOW64; rv:28.0)Gecko / 20100101 Firefox / 28.0

以下是执行浏览器检测的源代码:

DEMO

   <script>  
    var nVer = navigator.appVersion;
    var nAgt = navigator.userAgent;
    var browserName  = navigator.appName;
    var fullVersion  = ''+parseFloat(navigator.appVersion); 
    var majorVersion = parseInt(navigator.appVersion,10); // this is what you need
    var nameOffset,verOffset,ix;


// In Firefox, the true version is after "Firefox" 
if ((verOffset=nAgt.indexOf("Firefox"))!=-1) {
 browserName = "Firefox";
 fullVersion = nAgt.substring(verOffset+8);
}
// In most other browsers, "name/version" is at the end of userAgent 
else if ( (nameOffset=nAgt.lastIndexOf(' ')+1) < 
          (verOffset=nAgt.lastIndexOf('/')) ) 
{
 browserName = nAgt.substring(nameOffset,verOffset);
 fullVersion = nAgt.substring(verOffset+1);
 if (browserName.toLowerCase()==browserName.toUpperCase()) {
  browserName = navigator.appName;
 }
}
// trim the fullVersion string at semicolon/space if present
if ((ix=fullVersion.indexOf(";"))!=-1)
   fullVersion=fullVersion.substring(0,ix);
if ((ix=fullVersion.indexOf(" "))!=-1)
   fullVersion=fullVersion.substring(0,ix);

majorVersion = parseInt(''+fullVersion,10);
if (isNaN(majorVersion)) {
 fullVersion  = ''+parseFloat(navigator.appVersion); 
 majorVersion = parseInt(navigator.appVersion,10);
}

document.write(''
 +'Browser name  = '+browserName+'<br>'
 +'Full version  = '+fullVersion+'<br>'
 +'Major version = '+majorVersion+'<br>'
 +'navigator.appName = '+navigator.appName+'<br>'
 +'navigator.userAgent = '+navigator.userAgent+'<br>'
)
</script>

SRC