如何通过用户代理检测iOS 6和所有次要版本?

时间:2012-09-24 14:38:29

标签: ios regex user-agent ios6

如何使用简单的正则表达式或其他东西通过用户代理检测iOS 6和所有次要版本?也很好区分iphone和ipad。


这个问题与What is the iOS 6 user agent string?不同,因为我希望根据我已经知道的信息帮助建立一个正则表达式(可以在链接的问题中找到)

1 个答案:

答案 0 :(得分:26)

<强> CHANGELOG

  

<强> 20/01/2017

     
      
  • UA字符串更新:141匹配,0部分匹配,797无效行

  •   
  • “Mobile Safari 1.1.3(iPhone U;类似Mac OS X的CPU; en)”即使提及iPhone也被视为无效。实际上在iPhone术语可疑之后缺少分号。

  •   
  • Safari 8+尚未出现在UserAgentString.com

  • 上   

<强>必备条件

  • 以下正则表达式是通用的。
  • 它将匹配在移动设备上运行的Safari用户代理字符串(SUAS)(请参阅下面支持的设备列表)。
  • 正如 20/01/2017 那样,正则表达式基于UserAgentString.com已知的SUAS。

<强> REGEX

^(?:(?:(?:Mozilla/\d\.\d\s*\()+|Mobile\s*Safari\s*\d+(?:\.\d+)+\s*)(?:iPhone(?:\s+Simulator)?|iPad|iPod);\s*(?:U;\s*)?(?:[a-z]+(?:-[a-z]+)?;\s*)?CPU\s*(?:iPhone\s*)?(?:OS\s*\d+_\d+(?:_\d+)?\s*)?(?:like|comme)\s*Mac\s*O?S?\s*X(?:;\s*[a-z]+(?:-[a-z]+)?)?\)\s*)?(?:AppleWebKit/\d+(?:\.\d+(?:\.\d+)?|\s*\+)?\s*)?(?:\(KHTML,\s*(?:like|comme)\s*Gecko\s*\)\s*)?(?:(?:Version|CriOS)/\d+(?:\.\d+)+\s*)?(?:Mobile/\w+\s*)?(?:Safari/\d+(?:\.\d+)*.*)?$

支持的设备列表

  • iPhone
  • iPhone模拟器
  • ipad公司
  • 的iPod

解释/定制

可以自定义以 C 开头的行。

  1. ^(?:(?:(?:Mozilla/\d\.\d\s*\()+|Mobile\s*Safari\s*\d+(?:\.\d+)+\s*)
C 2.     (?:iPhone(?:\s+Simulator)?|iPad|iPod);\s*
  3.     (?:U;\s*)?
  4.     (?:[a-z]+(?:-[a-z]+)?;\s*)?
  5.     CPU\s*
  6.          (?:iPhone\s*)?
C 7.          (?:OS\s*\d+_\d+(?:_\d+)?\s*)?
C 8.          (?:like|comme)\s*Mac\s*O?S?\s*X
  9.      (?:;\s*[a-z]+(?:-[a-z]+)?)?
  10. \)\s*)?
  11. (?:AppleWebKit/\d+(?:\.\d+(?:\.\d+)?|\s*\+)?\s*)?
C 12. (?:\(KHTML,\s*(?:like|comme)\s*Gecko\s*\)\s*)?
C 13. (?:(?:Version|CriOS)/\d+(?:\.\d+)+\s*)?
  14. (?:Mobile/\w+\s*)?
  15. (?:Safari/\d+(?:\.\d+)*.*)?$

第1行。 UA字符串可能不同,因此引入此行以尽可能接受UA字符串。
第2行。您可以在此处指定已接受设备的管道分隔列表 (...)
第7行。此处显示的是版本。如果需要特殊版本,请更改此行。不要忘记更新第13行。例如,匹配 iOS 5.x.y 使用(?:OS\s*5_\d+_\d+\s*)? 第8行。某些用户代理字符串已翻译。单词like可以翻译成外语。正则表达式现在支持EnglishFrench。如果您遇到其他语言,请调整此行。不要忘记更新第12行 (...)
第12行。请参阅第8行。
第13行。请参阅第7行。例如,匹配 iOS 5.xy 使用(?:Version/5\.\d+\.\d+)?\s*)?