一、正则验证设备方法
web前端能够通过js来辨别mobile or pc,下面就列举一些常用的浏览器userAgent:
var agent=navigator.userAgent;
var patternMobile=/mobile/ig;
var patternModel={
"iphone":new RegExp("iPhone",'i'),
"iPad":new RegExp("iPad",'i'),
"iPod":new RegExp("iPod",'i'),
"mini":new RegExp("mini",'i'),
"android":new RegExp("android",'i'),
"360":new RegExp("360\s+Aphone\s+Browser",'i'),
"baidu":new RegExp("baidubrowser",'i'),
"uc":new RegExp("UCBrowser",'i'),
"dolphin":new RegExp("DolphinBrowserCN",'i'),
"sougou":new RegExp("SogouMobileBrowser",'i'),
"lenvo":new RegExp("Lenovo-",'i'),"opera":new RegExp("OPR",'i'),
"chrome":new RegExp("chrome",'i'),
"firefox":new RegExp("FireFox",'i'),
"qq":new RegExp("MQQBrowser",'i'),
"nokia":new RegExp("NokiaBrowser",'i'),
"Symbian":new RegExp("Symbian",'i'),
"windowsphone":new RegExp("Windows\s+Phone|w7|w8",'i'),
"weixin":new RegExp("WindowsWechat",'i')
}
1.patternMobile.test(agent) //检测是否为手机端
2.patternModel.iphone.test(agent) //检测是否为iphoe
3.patternModel.iPad.test(agent) //检测是否为ipad
4.patternModel.iPod.test(agent) //检测是否为iPod
5.patternModel.mini.test(agent) //检测是否为iphone mini
6.patternModel.iphone.test(agent) |patternModel.iPad.test(agent)|patternModel.iPod.test(agent)|patternModel.mini.test(agent) //检测是否为iphone 设备
7.patternModel.android.test(agent) //检测是否为android设备
8.patternModel.360.test(agent)&&patternMobile.test(agent) //检测是否为360手机浏览器
9.patternModel.baidu.test(agent)&&patternMobile.test(agent) //检测是否为百度手机浏览器
10.patternModel.uc.test(agent)&&patternMobile.test(agent) //检测是否为uc手机浏览器
11.patternModel.dolphin.test(agent)&&patternMobile.test(agent) //检测是否为海豚手机浏览器
12.patternModel.sougou.test(agent)&&patternMobile.test(agent) //检测是否为搜狗手机浏览器
13.patternModel.lenvo.test(agent)&&patternMobile.test(agent) //检测是否为联想自带手机浏览器
14.patternModel.opera.test(agent)&&patternMobile.test(agent) //检测是否为opera手机浏览器
15.patternModel.chrome.test(agent)&&patternMobile.test(agent) //检测是否为chrome手机浏览器
16.patternModel.firefox.test(agent)&&patternMobile.test(agent) //检测是否为firefox手机浏览器
17.patternModel.qq.test(agent)&&patternMobile.test(agent) //检测是否为qq手机浏览器
18.patternModel.nokia.test(agent)&&patternMobile.test(agent) //检测是否为nokia自带浏览器
19.patternModel.Symbian.test(agent)&&patternMobile.test(agent) //检测是否为Symbian浏览器
20.patternModel.windowsphone.test(agent) //检测是否为windowsphone
21.patternModel.weixin.test(agent) //检测是否为微信windows版
注:手机浏览器允许修改浏览器的标识,可能会出现检测异常的情况
二、完整的浏览器检查
var client=function(){
//呈现引擎
var engine={
ie:0,
gecko:0,
webkit:0,
khtml:0,
opera:0,
ver:null,//版本号
};
//浏览器
var browser={
ie:0,
firefox:0,
safari:0,
konq:0,
opera:0,
chrome:0,
ver:null
};
//平台、设备和操作系统
var system={
win:false,
mac:false,
x1l:false,
iphone:false,
ipod:false,
ipad:false,
ios:false,
android:false,
nokiaN:false,
winMobile:false,
wii:false,//游戏系统
ps:false
};
var ua=navigator.userAgent;
if(window.opera){
engine.ver=browser.ver=window.opera.version();
engine.opera=browser.opera=parseFloat(engine.ver);
}else if(/AppleWebkit\/(\S+)/.test(ua)){
engine.ver=RegExp['$1'];
engine.webkit=parseFloat(engine.ver);
//确定是Chrome还是safari
if(/Chrome\/(\S+)/.test(ua)){
browser.ver=RegExp['$1'];
browser.chrome=parseFloat(browser.ver);
}else if(/Version\/(\S+)/.test(ua)){
browser.ver=RegExp['$1'];
browser.safari=parseFloat(browser.ver);
}else{
var safariVersion = 1;
if(engine.webkit<100){
safariVersion = 1;
}else if(engine.webkit<312){
safariVersion = 1.2;
}else if(engine.webkit<412){
safariVersion = 1.3;
}else{
safariVersion = 2;
}
browser.safari=browser.ver=safariVersion;
}
}else if(/KHTML\/(\S+)/.test(ua) || /Konqueror\/([^;]+)/.test(ua)){
engine.ver=browser.ver=RegExp['$1'];
engine.khtml=browser.konq=parseFloat(engine.ver);
}else if(/rv:([^\)]+)\) Gecko\/\d{8}/.test(ua)){
engine.ver=RegExp['$1'];
engine.gecko=parseFloat(engine.ver);
//确定是不是firefox
if(/Firefox\/(\S+)/.test(ua)){
browser.ver=RegExp['$1'];
browser.firefox=parseFloat(browser.ver);
}
}else if(/MISE ([^;]+)/.test(ua)){
browser.ver=engine.ver=RegExp['$1'];
engine.ie=browser.ie=parseFloat(engine.ver);
}
browser.ie=engine.ie;
browser.opera=engine.opera;
//检测平台
var p=navigator.platform;
system.win=p.indexOf('Win')==0;
system.mac=p.indexOf('Mac')==0;
system.x1l=(p=="X11") || (p.indexOf('Linux')==0);
//检测windows操作系统
if(system.win){
if(/Win(?:dows )?([^do]{2})\s?(\d+\.\d+)?/.test(ua)){
if(RegExp['$1']=="NT"){
switch(RegExp['$2']){
case '5.0':
system.win="2000";
break;
case '5.1':
system.win="XP";
break;
case '6.0':
system.win="Vista";
break;
case '6.1':
system.win="7";
break;
default:
system.win="NT";
break;
}
}else if(RegExp['$1']=='9x'){
system.win="ME";
}else{
system.win=RegExp['$1'];
}
}
}
//移动设备
system.iphone=ua.indexOf('iPhone')>-1;
system.ipod=ua.indexOf('iPod')>-1;
system.ipad=ua.indexOf('iPad')>-1;
system.nokiaN=ua.indexOf('NokiaN')>-1;
//windows mobile
if(system.win=="CE"){
system.winMobile=system.win;
}else if(system.win=="Ph"){
if(/Windows Phone OS (\d+.\d+)/.test(ua)){
system.win="Phone";
system.winMobile=parseFloat(RegExp['$1']);
}
}
//检测ios
if(system.mac && ua.indexOf("Mobile")>-1){
if(/CPU (?:iPhone )?OS (\d+_\d+)/.test(ua)){
system.ios=parseFloat(RegExp.$1.replace("_","."));
}else{
system.ios=2;
}
}
//检测Android版本
if(/Android (\d+\.\d+)/.test(ua)){
system.android=parseFloat(RegExp.$1);
}
//游戏系统
system.wii=ua.indexOf("Wii")>-1;
system.ps=/playstation/i.test(ua);
return {
engine:engine,
browser:browser,
system:system
};
}