Получить версию ОС Android от user-agent - PullRequest
17 голосов
/ 14 марта 2011

Я пытался найти синтаксический анализатор или регулярное выражение, которое даст мне версию ОС Android из строки пользовательского агента.

Например,

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

Вернет:

2.2.1

Кто-нибудь может помочь?

Ответы [ 4 ]

23 голосов
/ 11 мая 2011

Это регулярное выражение является немного более "перспективным", чем ответ mathepic :

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

Это позволяет использовать несколько цифр в каждом месте, а также дополнительные периоды в номере версии. Андроид уже 3 года нет, а мы на 3.0. В конце концов мы доберемся до 10.0.0.

Это поймает все следующее:

  • 1,6 (реальное)
  • 2.3.4 (реальное)
  • 12.34.56 (фальшивка, но однажды ...)
  • 3.4.5.6 и 4.5.6.7.8.9 (подделка ... но на всякий случай)

Это можно записать немного более строго как:

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

Это больше соответствует схеме, которую мы уже видели, но потенциально может пропустить некоторые версии, если они решат добавить дополнительный .1 в конце версии. Это также соответствует будущей версии 10.0.0.

2 голосов
/ 23 января 2014

Пользовательские агенты игрока Motorola могут иметь следующие данные:

Linux;Android ; Release/4.1.2

Итак, мне пришлось начать использовать следующее:

[a|A]ndroid[^\d]*([\d[_|.]]+\d)
1 голос
/ 14 декабря 2012

Могу ли я представить ответ, который другие могут легко скопировать и вставить.

navigator.userAgent.match(/Android [\d+\.]{3,5}/)[0].replace('Android ','')
1 голос
/ 14 марта 2011

Regex должен работать, что-то вроде непроверенных строк

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

А затем используйте любую функцию регулярного выражения, которую вы используете, чтобы получить эту часть в скобках.

...