2012-12-24 49 views
0

我需要檢測瀏覽器是否爲Android(僅從1到2.3版本),這是否工作?在PHP中檢測Android瀏覽器(從V1到2.3固件)

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

不是。正則表達式引擎無法知道版本號範圍的工作方式,可以嗎?你也在濫用角色類,即使它只是你嘗試匹配的一系列數字。這將匹配'Android 1','Android 2','Android'和'Android 3'。實際上,如果其中任何一個是輸入的子字符串,它就會匹配(所以它也會匹配'Android 2.5')。您能否向我們展示可能在輸入中顯示的實際可能的版本號? –

+0

那麼,我需要回應一個不支持SVG的android版本的回退(所有版本<2.3)。 – MultiformeIngegno

+0

這在這裏沒有什麼幫助。一個「壞」版本號的列表會。 –

回答

1

Android需求以下正則表達式可以完全匹配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])?)$

Running regex here

+0

也會匹配'Android 2.4' –

+0

這是怎麼回事? /Android [12] \。\ d/ – MultiformeIngegno

+0

@MultiformeIngegno也可以匹配任何版本的'2. *' –

0

我真的不知道這些設備的UserAgents是什麼樣的,但你擁有的模式不可能是你想要的。我懷疑你想要的線沿線的東西更多:

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

有很多,你可以寫的模式不同的方式,但本質上這一個說,要遵循既1.{any number}2.0, 2.1 or 2.2

0

我想建議你使用Browscap的瀏覽器檢測。

get_browser功能DOC http://php.net/manual/en/function.get-browser.php

「實際」 browscap .ini文件下載http://tempdownloads.browserscap.com

應當指出的是,該項目是目前在瀏覽器的問題,數據庫的進一步更新關閉。

使用exapmle你的情況:

$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'; 
} 
0

您可以使用以下正則表達式來獲得Android瀏覽器版本,無論是在X.X.X格式或x.x.我有一個正則表達式來確定設備使用的版本之一,我支持(2.3.x版本+):

/Android ([2].?[3-9].?[0-9]?|[3].?[0-9].?[0-9]?|[4].?[0-9].?[0-9]?)/ 
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