7

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


这个问题不同于iOS 6 用户代理字符串是什么?因为我需要根据我已经知道的信息(可以在链接的问题中找到)构建正则表达式的帮助

4

1 回答 1

26

变更日志

20/01/2017

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

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

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

先决条件

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

正则表达式

^(?:(?:(?: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 模拟器
  • 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.xy使用(?:OS\s*5_\d+_\d+\s*)?.
第 8 行。翻译了一些用户代理字符串。这个词like可以翻译成外语。正则表达式现在支持EnglishFrench。如果您遇到其他语言,请调整此行。不要忘记更新第 12 行
(...)
第 12 行。第 8
行。第 13 行。第 7 行。例如,匹配iOS 5.xy使用(?:Version/5\.\d+\.\d+)?\s*)?.

于 2012-09-25T10:08:53.957 回答