2010-11-22 53 views
0

檢測操作系統版本獲取使用的navigator.userAgent在JavaScript中,我們得到的東西像這樣的HTTP User-Agent頭信息(使用不同的操作系統和瀏覽器):正則表達式在JavaScript中

"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12" 

"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7" 

"Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.7) Gecko/2009030423 Ubuntu/8.10 (intrepid) Firefox/3.0.7" 

"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.7) Gecko/2009021906 Firefox/3.0.7" 

"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528.16" 

正如你所看到的OS版本是第三個分號前的數字組;

我需要一個javascript正則表達式來獲取他的數字。

非常感謝。

+0

不是答案,所以我會評論:記得在'USER-AGENT'標題中提供任何信息。在一些社區中,不僅可以僞造,它很可能是僞造的。不過,對於一個通用的網站,你可以在很大程度上忽略它。 – 2010-11-22 14:35:29

回答

3

正則表達式的匹配方法在這裏會很棘手。從您自己的示例中可以看到,Ubuntu上Firefox的版本詳細信息完全不同。你可以使用一個簡單的拆分正則表達式將字符串分割成不同的部分:

// Split on ;, (or), removing the white-space at either side 
var parts = navigator.userAgent.split(/\s*[;)(]\s*/); 

結果:

["Mozilla/5.0", "Windows", "U", "Windows NT 6.1", "en-US", "AppleWebKit/534.7", "KHTML, like Gecko", "Chrome/7.0.517.44 Safari/534.7"] 

這裏的好處是,你可以提取你需要沒有過於複雜的定期信息表達。這裏有一個簡單的條件可以告訴你OS /版本數據的存儲位置,然後進一步處理以提取版本號。例如:

var result; 
if (/^Linux/.test(parts[3])) 
    result = parts[6].split("/").pop(); // "8.10" (Ubuntu) 
else 
    result = parts[3].split(" ").pop(); // "6.1" (Win 7) 

工作演示:http://jsfiddle.net/AndyE/p6Uzc/

進一步條件句將需要其他瀏覽器/系統(如在移動電話上的瀏覽器)。例如,在Windows 7歌劇10具有包含用戶代理字符串:

歌劇院/ 9.80(Windows NT的6.1; U;烯)的Presto/2.6.30版/ 10.63

還記得用戶代理字符串可能被僞造成完全不同或包含不同信息。

0

試試這個:

/(?:[^;]+;){2}.*?([\w\.]+);/g 

在第一場比賽,你會發現操作系統版本

+0

這是什麼[\ w \。]? – Jonathan 2010-11-22 14:54:30

+0

這對於由Gecko引擎提供的Linux示例用戶代理字符串不起作用,其中版本號更接近字符串的末尾。 – 2010-11-22 14:57:51

+0

[\ w \。]匹配字母,數字下劃線和圓點,但您可以使用\ S來替代其他人的建議。 @安迪E:爲什麼它不起作用?我已經嘗試過了,它效果很好 – mck89 2010-11-22 15:03:02

0

下面將抓住所有的非空格字符就在第三個分號的前面,並把它第一組:

.*?;.*?;.*?(\S+); 

根據您希望包括您可以更改\ S只包含您感興趣的角色是什麼

0

解決方案,爲我的作品:

// finding OS 
function findOS(){ 

    var OS_Name = navigator.appVersion; 
    if (OS_Name.indexOf("Win") != -1) { 
     // 64bit or 32bit version 
     if (test(/\sx64|\sx86|\swin64|\swow64|\samd64/i)) { 
      // if 64 bit Windows 
     } else { 
      // if 32 bit Windows 
     } 
    } else if (OS_Name.indexOf("Mac") != -1 
     || OS_Name.indexOf("X11") != -1 
     || OS_Name.indexOf("Linux") != -1 
     || OS_Name.indexOf("SunOS") != -1 ) { 
     //if it's OS that is not Windows 
    } 
} 

function test(regex) { 
    return regex.test(navigator.userAgent); 
} 

非常優雅的方式來檢測該OS客戶使用,是它64位或32位