如何使用简单的正则表达式或其他东西通过用户代理检测 iOS 6 和所有次要版本?也可以区分 iphone 和 ipad。
这个问题不同于iOS 6 用户代理字符串是什么?因为我需要根据我已经知道的信息(可以在链接的问题中找到)构建正则表达式的帮助
如何使用简单的正则表达式或其他东西通过用户代理检测 iOS 6 和所有次要版本?也可以区分 iphone 和 ipad。
这个问题不同于iOS 6 用户代理字符串是什么?因为我需要根据我已经知道的信息(可以在链接的问题中找到)构建正则表达式的帮助
变更日志
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 上
先决条件
正则表达式
^(?:(?:(?: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+)*.*)?$
支持的设备列表
解释/定制
可以自定义以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
可以翻译成外语。正则表达式现在支持English
和French
。如果您遇到其他语言,请调整此行。不要忘记更新第 12 行。
(...)
第 12 行。见第 8
行。第 13 行。见第 7 行。例如,匹配iOS 5.xy使用(?:Version/5\.\d+\.\d+)?\s*)?
.