2014-04-17 123 views
0

特定的浏览器我有一些像这样的代码:检测用JavaScript正则表达式

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?

+0

为什么你需要检测浏览器? –

+0

@NiettheDarkAbsol:为什么这很重要? –

+0

我认为你需要'test'或'代替match' indexOf' – putvande

回答

1

喜欢的东西:

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

不要使用^在你的正则表达式,因为火狐不是字符串的开头。 如果你想使用可选的17-19 | 20 - 99,它应该在()之间。

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

-1

你需要的变量是var majorVersion

下面的代码示例使用的navigator.userAgent实现浏览器 检测。如果userAgent字符串的格式为“意外” ,那么它也会使用navigator.appName和navigator.appVersion作为 的最后一招。在浏览器中,此代码产生以下输出:

浏览器名称= Mozilla Firefox浏览器
完整版= 28.0
主要版本= 28
navigator.appName =网景
的navigator.userAgent =的Mozilla/5.0 (Windows NT的6.2; WOW64; RV:28.0)的Gecko/20100101火狐/ 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

1

你可以阅读的userAgent字符串和匹配版本号 -

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

'var bs'很好的感觉! :) –

0

你可以用*REGEX*.test('testString'); 返回真/假测试你的正则表达式。通过这个正则表达式:/ ^(Firefox)[1] {1} [7-9] {1} | [2] {1} [0-9]可以找到像“Firefox17”,“Firefox22” {1} $所以你可以试试: /^(Firefox)[1]{1}[7-9]{1}|[2]{1}[0-9]{1}$.test(navigator.userAgent)