我一直在尝试找到一个解析器或正则表达式,它会从用户代理字符串中为我提供Android操作系统版本。
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
将返回:
2.2.1
有人可以帮忙吗?
答案 0 :(得分:23)
这个正则表达式比mathepic's answer更具“未来证据”:
Android (\d+(?:\.\d+)+);
它允许每个地方有多个数字以及版本号中的其他句号。 Android已经用了3年,而我们用的是3.0。最终我们将达到10.0.0。
这将抓住以下所有内容:
这可以写得更严格一点:
Android (\d+(?:\.\d+){1,2});
这更贴近我们已经看过的架构,但可能会错过某些版本,他们决定在版本末尾添加额外的.1
。它还匹配未来的10.0.0
版本。
答案 1 :(得分:2)
摩托罗拉的玩家用户代理可以拥有以下内容:
Linux;Android ; Release/4.1.2
所以,我必须开始使用以下内容:
[a|A]ndroid[^\d]*([\d[_|.]]+\d)
答案 2 :(得分:1)
正则表达式应该可行,这是未经测试的
行 Android ([0-9]\.[0-9](\.[0-9])?);
然后使用你使用的任何正则表达式函数将该部分放入parens中。
答案 3 :(得分:1)
我可以提供一个其他人可以轻松复制和粘贴的答案。
navigator.userAgent.match(/Android [\d+\.]{3,5}/)[0].replace('Android ','')
答案 4 :(得分:0)
如果您想将其与User-Agent一起使用,可能是安全的,但否则您不应该使用它。
Android ((\d+|\.)+[^,;]+)
它可以在Android兼容后捕获所有内容,
1.6 2.4.4 10.12.5
要使用Live Regex进行测试:https://www.phpliveregex.com/p/uPw