Получить версию ОС 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