Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JavaScript RegExp检测特定浏览器_Javascript_Regex - Fatal编程技术网

使用JavaScript RegExp检测特定浏览器

使用JavaScript RegExp检测特定浏览器,javascript,regex,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

我有一个类似这样的代码:

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?

类似于:

navigator.userAgent.match(/Firefox\/([1]{1}[7-9]{1}|[2-9]{1}[0-9]{1})/);
不要在RegExp中使用
^
,因为Firefox不是字符串的开头。 如果您想使用可选的17-19 | 20-99,它应该介于
之间


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

您需要的变量是
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

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


var nVer=navigator.appVersion;
var nAgt=navigator.userAgent;
var browserName=navigator.appName;
var fullVersion=''+parseFloat(navigator.appVersion);
var majorVersion=parseInt(navigator.appVersion,10);//这就是你需要的
变量名称偏移量,verOffset,ix;
//在Firefox中,真正的版本在“Firefox”之后
如果((verOffset=nAgt.indexOf(“Firefox”)!=-1){
browserName=“Firefox”;
fullVersion=nAgt.子字符串(verOffset+8);
}
//在大多数其他浏览器中,“name/version”位于userAgent的末尾
如果((nameOffset=nAgt.lastIndexOf(“”)+1)<
(verOffset=nAgt.lastIndexOf('/'))
{
browserName=nAgt.substring(nameOffset,verOffset);
fullVersion=nAgt.子字符串(verOffset+1);
if(browserName.toLowerCase()==browserName.toUpperCase()){
browserName=navigator.appName;
}
}
//在分号/空格处修剪fullVersion字符串(如果存在)
如果((ix=fullVersion.indexOf(“;”)!=-1)
fullVersion=fullVersion.substring(0,ix);
如果((ix=fullVersion.indexOf(“”)!=-1)
fullVersion=fullVersion.substring(0,ix);
majorVersion=parseInt(“”+fullVersion,10);
如果(isNaN(主要版本)){
fullVersion=''+parseFloat(navigator.appVersion);
majorVersion=parseInt(navigator.appVersion,10);
}
文件。写(“”)
+“浏览器名称=”+browserName+”
' +“完整版本=”+fullVersion+”
' +“主要版本=”+majorVersion+”
' +'navigator.appName='+navigator.appName+'
' +'navigator.userAgent='+navigator.userAgent+'
' )

您可以读取userAgent字符串并匹配版本号-

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

您可以使用
*REGEX*.test('testString')测试正则表达式
它返回true/false。我能找到像“Firefox17”“Firefox22”这样的字符串。。。通过此正则表达式:/^(Firefox)[1]{1}[7-9]{1}|[2]{1}[0-9]{1}$,因此您可以尝试:

/^(Firefox)[1]{1}[7-9]{1}{124;[2]{1}[0-9]{1}$.test(navigator.userAgent)

你为什么需要检测浏览器?@NiettheDarkAbsol:这有什么关系?我认为你需要
测试
匹配
,而不是
indexOf
,除非你完全确定你在做什么,与浏览器嗅探相比,我更喜欢功能嗅探。我得到了一些业务需求,我必须编写代码。挑战并不重要。我正在寻求一些RegExp帮助来查找数字17及更高版本。
var bs
nice touch!:)
var bs=navigator.userAgent.match(/Firefox\/(\d+)/);
if(bs && parseInt(bs[1])>17) alert('Firefox '+bs[1]+' detected.')