0

我需要检测浏览器是否为 Android(仅从 1 到 2.3 版本),这行得通吗?

if(preg_match('/Android [1-2.3]/', $_SERVER['HTTP_USER_AGENT'])) {
 echo 'something';
}
4

5 回答 5

1

以下 Regex 可以完全匹配Android [1-2.3]

Android ([1](?:\.[0-9])?|[2](?:\.[0-3])?$)

为了MSIE [6-8] Android [1-2.3]

MSIE [6-8] Android ([1](?:\.[0-9])?|[2](?:\.[0-3])?)$

在这里运行正则表达式

于 2012-12-24T13:37:30.383 回答
0

我真的不知道这些设备的 UserAgent 是什么样的,但是您拥有的模式不太可能是您想要的。我怀疑你想要更多的东西:

'/Android (1\.\d|2\.[012])/'

有很多不同的方法可以编写模式,但基本上这个说Android需要遵循1.{any number}或者2.0, 2.1 or 2.2

于 2012-12-24T13:31:39.987 回答
0

我想建议您使用 Browscap 进行浏览器检测。

get_browser函数文档http://php.net/manual/en/function.get-browser.php

“实际”browscap .ini 文件下载http://tempdownloads.browserscap.com

应该注意的是,该项目目前已关闭,并且正在进一步更新有问题的浏览器数据库。

在您的情况下使用示例:

$browser = get_browser(null, true);
if (array_key_exists('Platform', $browser) && array_key_exists('Platform_Version', $browser) && $browser['Platform'] == 'Android' && $browser['Platform_Version'] <= 2.3) {
    echo 'Android <2.3 version';
}
于 2012-12-24T13:43:33.290 回答
0

您可以使用以下正则表达式来获取 Android 浏览器版本,无论是 xxx 格式还是 xx 我有一个正则表达式来确定设备是否使用我支持的版本之一(2.3.x +):

/Android ([2].?[3-9].?[0-9]?|[3].?[0-9].?[0-9]?|[4].?[0-9].?[0-9]?)/
于 2013-10-11T16:35:19.987 回答
0

从 github 我发现这段代码非常有用:https ://gist.github.com/Abban/3939726

if(is_old_android('2.3')) {
  echo 'This device has Android 2.3 or lower';
}

function is_old_android($version = '4.0.0'){
   if(strstr($_SERVER['HTTP_USER_AGENT'], 'Android')){

     preg_match('/Android (\d+(?:\.\d+)+)[;)]/', $_SERVER['HTTP_USER_AGENT'], $matches);

     // $matches[0]= Android 4.1.2;
     // $matches[1]= 4.1.2

        return version_compare($matches[1], $version, '<=');
    }
}

非常有用的功能:version_compare

于 2014-03-12T20:22:58.263 回答