Получить версию ОС Android от user-agent

Я пытался найти синтаксический анализатор или регулярное выражение, которое даст мне версию ОС 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 ответа

Это регулярное выражение является чуть более "будущим", чем ответ 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 версия.

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

Linux;Android ; Release/4.1.2

Итак, я должен был начать использовать следующее:

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

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

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

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

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

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

Если вы хотите использовать его с User-Agent, это может быть безопасно, но в остальном вам не следует его использовать.

Android ((\d+|\.)+[^,;]+)

После Android ловит все, с чем работает,

1.62.4.410.12.5

Для тестирования с Live Regex: https://www.phpliveregex.com/p/uPw

Другие вопросы по тегам