Skip to content

Instantly share code, notes, and snippets.

@ranaroussi
Created December 2, 2013 11:16
Show Gist options
  • Save ranaroussi/7748105 to your computer and use it in GitHub Desktop.
Save ranaroussi/7748105 to your computer and use it in GitHub Desktop.
js userAgent parser
navigator.agent = (function() {
var ua = navigator.userAgent, ver;
// browser
var browser = ua.match(/(opera|chrome|safari|firefox|msie|trident)\/?\s*(\.?\d+(\.\d+)*)/i);
if (browser && (ver = ua.match(/version\/([\.\d]+)/i)) !== null) browser[2] = ver[1];
var bver = browser[2].split('.');
// os
var os = {};
os.platform = 'Desktop';
if (/mobile/i.test(ua)) os.platform = 'Mobile';
if (/tablet/i.test(ua)) os.platform = 'Tablet';
if (/like Mac OS X/.test(ua)) {
os.family = 'iOS';
if (/iPhone/.test(ua)) os.platform = 'iPhone';
if (/iPad/.test(ua)) os.platform = 'iPad';
if (/iPod/.test(ua)) os.platform = 'iPod touch';
osver = /CPU( iPhone)? OS ([0-9\._]+) like Mac OS X/.exec(ua)[2].replace(/_/g, '.');
}
if (/Android/.test(ua)) {
os.family = 'Android';
osver = /Android ([0-9\.]+)[\);]/.exec(ua)[1];
}
if (/webOS\//.test(ua)) {
os.family = 'webOS';
osver = /webOS\/([0-9\.]+)[\);]/.exec(ua)[1];
}
if (/(Intel|PPC) Mac OS X/.test(ua)) {
os.family = 'Mac OS X';
osver = /(Intel|PPC) Mac OS X ?([0-9\._]*)[\)\;]/.exec(ua)[2].replace(/_/g, '.') || true;
}
if (/Windows NT/.test(ua)) {
os.family = 'Windows';
osver = /Windows NT ([0-9\._]+)[\);]/.exec(ua)[1];
}
ver = osver.split('.');
return {
string: ua,
os: {
platform: os.platform,
name: os.family+' '+osver,
family: os.family,
version: {
full: osver,
major: ver[0] || "",
minor: ver[1] || "",
patch: ver[2] || ""
}
},
ua: {
name: browser[1]+' '+browser[2],
family: browser[1],
version: {
full: browser[2],
major: bver[0] || "",
minor: bver[1] || "",
patch: bver[2] || ""
}
}
};
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment