You can use this minified jQuery snippet to detect if your user is viewing using a mobile device. If you need to test for a specific device I’ve included a collection of JavaScript snippets below which can be used to detect various mobile handheld devices such as iPad, iPhone, iPod, iDevice, Andriod, Blackberry, WebOs and Windows Phone.

 * (
 * will be true if the browser is a mobile device
(function(a){|avantgo|bada/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)/|plucker|pocket|psp|symbian|treo|up.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|/(k|l|u)|50|54|e-|e/|-[a-w])|libw|lynx|m1-w|m3ga|m50/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(-|2|g)|yas-|your|zeto|zte-/i.test(a.substr(0,4))})(navigator.userAgent||navigator.vendor||window.opera);

Example Usage:

   console.log('You are using a mobile device!');
   console.log('You are not using a mobile device!');

Detect iPad

var isiPad = /ipad/i.test(navigator.userAgent.toLowerCase());
if (isiPad)

Detect iPhone

var isiPhone = /iphone/i.test(navigator.userAgent.toLowerCase());
if (isiPhone)

Detect iPod

var isiPod = /ipod/i.test(navigator.userAgent.toLowerCase());
if (isiPod)

Detect iDevice

var isiDevice = /ipad|iphone|ipod/i.test(navigator.userAgent.toLowerCase());

if (isiDevice)

Detect Andriod

var isAndroid = /android/i.test(navigator.userAgent.toLowerCase());

if (isAndroid)

Detect Blackberry

var isBlackBerry = /blackberry/i.test(navigator.userAgent.toLowerCase());

if (isBlackBerry)

Detect WebOs

var isWebOS = /webos/i.test(navigator.userAgent.toLowerCase());

if (isWebOS)

Detect Windows Phone

var isWindowsPhone = /windows phone/i.test(navigator.userAgent.toLowerCase());

if (isWindowsPhone)
Sam Deering is a Front-end Web Developer who specialises in JavaScript & jQuery. Sam is driven and passionate about sharing his knowledge to educate others.

Free Guide:

How to Choose the Right Charting Library for Your Application

How do you make sure that the charting library you choose has everything you need? Sign up to receive this detailed guide from FusionCharts, which explores all the factors you need to consider before making the decision.

  • Maximus Saint

    awesome! but would be even more awesomer  if you could set this thing up based on screen resolution, like we do with mediaqueries…

    Thanks anyway.

    • Friso

      Maximus, you mean something like below? I *was* using this, but it didn’t work for me. I was using it to serve out the rightfull video stream (live stream) per device. But obviously when a client is using a very low resolution on a desktop the javascript will think it is a tablet and thus show a low bandwith stream… But maybe someone else could use it tho:

      function device_detection() {
      devices = new Array();
      devices[0] = new Array();

      devices[0][‘min’] = 0;
      devices[0][‘max’] = 649;
      devices[0][‘device’] = ‘phone';

      devices[1] = new Array();
      devices[1][‘min’] = 650;
      devices[1][‘max’] = 1154;
      devices[1][‘device’] = ‘tablet';

      devices[2] = new Array();
      devices[2][‘min’] = 1155;
      devices[2][‘max’] = 99999;
      devices[2][‘device’] = ‘desktop';

      found = false;
      for(i = 0; i = device[‘min’]) && (screen.width <= device['max'])) {
      found = device['device'];

      return found;

      • Peo

        this is awsome, thanks

  • CodeHunger

    This is great! why isn’t this a jquery plugin?

  • Verulam

    I wanted to detect any mobile device including tablets, not just smartphones, so I have modified the regex as below:
    changed android.+mobile to android [any Android device]
    changed ip(hone|od) to ip(ad|hone|od) [addsiPad]
    added tablet [catch-all for tablets]
    added webos [adds the ill-fated HP tablet!];
    the complete thing is now:
    (function(a){|avantgo|bada/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(ad|hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)/|plucker|pocket|psp|symbian|tablet|treo|up.(browser|link)|vodafone|wap|webos|windows (ce|phone)|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|/(k|l|u)|50|54|e-|e/|-[a-w])|libw|lynx|m1-w|m3ga|m50/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(-|2|g)|yas-|your|zeto|zte-/i.test(a.substr(0,4))})(navigator.userAgent||navigator.vendor||window.opera);
    May be useful to somone else!

    • Friso


    • cedric sandars

      Thanks so much!!

    • Lode Reynaert

      Thx. Attention at the begin of this code: !!! …. must be (jQuery.browser=jQuery.browser||{}).mobile=… !!! If you don’t write this, you get the error: “Uncaught TypeError: Cannot set the property ‘mobile’ of undefined.”

    • Val

      I’m a novice in jquery and would like to know how to implement this. I want to check if it’s mobile and then load mobile.css. Could you please guide me. Thanks.

    • Kartik

      How can i call function(a) and display number of device which has been caught using above script.

  • Pingback: 12+ jQuery Mobile Layout Plugins and Examples | jQuery4u()

  • Peo

    this is awsome. perfectly working. thanks bro..

  • jeff

    Liddle widdle change you gotta make to update for iPads; replace “|ip(hone|od)|” with “|ip(hone|od|ad)|”. Least I had to do this to get my iPad recognized as mobile.

  • Suj

    Another legendary post. Awesome. Works pretty well.

  • Behzad G

    Thanks :)

  • Till Pape

    The first example does not work because $.browser is not suppurted in jQuery any more. A simple fix is to replace with browserMobile.

  • Pingback: 检测浏览器的移动设备终端类型 | 倔强的部落格()

  • Pingback: himiran | [scripts] mobile device detect()

  • Aaron

    Hi guys i am trying to implement this feature into my big cartel site, i was wondering if you could help me. I call my scripts i want in a file called layout. Here is where i am guessing that i add in the function call. This is also where i guess i will call the $ getscript function?

    At the moment nothing is working, even the console log, as a newb i am finding this a little bit difficult. Many thanks.

  • Peter Nguyen

    Hi! I use a plugin to switch to another page, so you need to use window.location.href (‘’) or other code? So I checked on the iPhone and found location.href () or location.reload () will not run.

  • yoyo

    thanks, thanks very much, your note helped me out a lot !

  • george aetos

    how stop dowload facebook js? in mobile ???????? the code is


    function downloadJSAtOnload()

    {var element = document.createElement(“script”);element.src = “//″;document.body.appendChild(element);}

    if (window.addEventListener)window.addEventListener(“load”, downloadJSAtOnload, false);

    else if (window.attachEvent)window.attachEvent(“onload”, downloadJSAtOnload);

    else window.onload = downloadJSAtOnload;


    I will mobile false this code faster load time in mobile please help me :(

  • Muslu Yüksektepe

    thanks for sharing. so easy to use

  • ronnel sanchez

    Hi Guys is there a way to detect whether if a website is open in a InApp-browser or WebView?

  • Jon Arne Sæterås

    To make mobile device identification easier with jQuery, here is an “extension” that make use of wurfl.js:

Learn JavaScript for free!
Free course: Introduction to JavaScript

Yours when you take up a free 14-day SitePoint Premium trial.