4. 识别Windows操作系统
在Windows平台下,还可以从用户代理字符串中进一步取得具体的操作系统信息。在Windows XP之前,Windows有两种版本,分别针对家庭用户和商业用户。针对家庭用户的版本分别是Windows 95、98和Windows ME。而针对商业用户的版本则一直叫做Window NT,最后由于市场原因改名为Windows 2000。这两个产品线后来又合并成一个由Windows NT发展而来的公共的代码基,代表产品就是Windows XP。随后,微软在Windows XP基础上又构建了Windows Vista。
只有了解这些信息,才能搞清楚用户代理字符串中Windows操作系统的具体版本。下表列出了不同浏览器在表示不同的Windows操作系统时给出的不同字符串。
Windows版本IE 4+GeckoOpera < 7Opera 7+WebKit95"Windows 95""Win95""Windows 95""Windows 95"n/a98"Windows 98""Win98""Windows 98""Windows 98"n/aNT 4.0"Windows NT""WinNT4.0""Windows NT 4.0""Windows NT 4.0"n/a2000"Windows NT 5.0""Windows NT 5.0""Windows 2000""Windows NT 5.0"n/aME"Win 9x 4.90""Win 9x 4.90""Windows ME""Win 9x 4.90"n/aXP"Windows NT 5.1""Windows NT 5.1""Windows XP""Windows NT 5.1""Windows NT 5.1"Vista"Windows NT 6.0""Windows NT 6.0"n/a"Windows NT 6.0""Windows NT 6.0"7"Windows NT 6.1""Windows NT 6.1"n/a"Windows NT 6.1""Windows NT 6.1"
由于用户代理字符串中的Windows操作系统版本表示方法各异,因此检测代码并不十分直观。好在,从Windows 2000开始,表示操作系统的字符串大部分都还相同,只有版本号有变化。为了检测不同的Windows操作系统,必须要使用正则表达式。由于使用Opera 7之前版本的用户已经不多了,因此我们可以忽略这部分浏览器。
第一步就是匹配Windows 95和Windows 98这两个字符串。对这两个字符串,只有Gecko与其他浏览器不同,即没有"dows",而且"Win"与版本号之间没有空格。要匹配这个模式,可以使用下面这个简单的正则表达式。
/Win(?:dows )?([^do]{2})/
这个正则表达式中的捕获组会返回操作系统的版本。由于版本可能是任何两个字符编码(例如95、98、9x、NT、ME及XP),因此要使用两个非空格字符。
Gecko在表示Windows NT时会在末尾添加"4.0",与其查找实际的字符串,不如像下面这样查找小数值更合适。
/Win(?:dows )?([^do]{2})(\d+\.\d+)?/
这样,正则表达式中就包含了第二个捕获组,用于取得NT的版本号。由于该版本号对于Windows 95和Windows 98而言是不存在的,所以必须设置为可选。这个模式与Opera表示Windows NT的字符串之间唯一的区别,就是"NT"与"4.0"之间的空格,这在模式中很容易添加。
/Win(?:dows )?([^do]{2})\s?(\d+\.\d+)?/文章来源:https://www.toymoban.com/news/detail-442068.html
经过一番修改之后,这个正则表达式也可以成功地匹配Windows ME、Windows XP和Windows Vista的字符串了。具体来说,第一个捕获组将会匹配95、98、9x、NT、ME或XP。第二个捕获组则只针对Windows ME及所有Windows NT的变体。这个信息可以作为具体的操作系统信息保存在system.win属性中,如下所示。
if (syst文章来源地址https://www.toymoban.com/news/detail-442068.html
到了这里,关于用户代理字符串检测技术【2】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!