Get Android OS version from user-agent

2019-01-17 04:37发布

问题:

I've been trying to find a parser or regex that will give me the Android OS version from a user agent string.

E.g.

Mozilla/5.0 (Linux; U; Android 2.2.1; fr-fr; Desire HD Build/FRG83D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

Will return:

2.2.1

Can anyone help?

回答1:

This regular expression is a bit more "future proof" than mathepic's answer:

Android (\d+(?:\.\d+)+);

It allows for multiple digits in each place as well as additional periods in the version number. Android's been out 3 years and we're on 3.0. Eventually we'll get to 10.0.0.

This will catch all of the following:

  • 1.6 (real)
  • 2.3.4 (real)
  • 12.34.56 (fake. but one day...)
  • 3.4.5.6 and 4.5.6.7.8.9 (fake... but just in case)

This could be written a little more strictly as:

Android (\d+(?:\.\d+){1,2});

This sticks more closely to the schema we've already seen used, but could potentially miss some versions of they decide to add an additional .1 at the end of a version. It also matches for the future 10.0.0 version.



回答2:

Motorola's player user agents can have the following:

Linux;Android ; Release/4.1.2

So, I've had to start using the the following:

[a|A]ndroid[^\d]*([\d[_|.]]+\d)


回答3:

Regex should work, something along the untested lines of

Android ([0-9]\.[0-9](\.[0-9])?);

And then use whatever regex function you use to get that part inside the parens.



回答4:

May I present an answer that others can easily copy and paste.

navigator.userAgent.match(/Android [\d+\.]{3,5}/)[0].replace('Android ','')