7

単純な正規表現などを使用して、ユーザー エージェントによって iOS 6 とすべてのマイナー バージョンを検出する方法は? iPhone と iPad も区別できるといいですね。


この質問は、「iOS 6 ユーザー エージェント文字列とは何ですか?」とは異なります。私がすでに知っている情報に基づいて正規表現を構築するのに助けが必要だったので(リンクされた質問で見つけることができます)

4

1 に答える 1

26

CHANGELOG

2017年1月20日

  • UA文字列の更新:141の一致、0の部分的な一致、および797の無効な行

  • 「MobileSafari1.1.3(iPhone U; Mac OSXのようなCPU;en)」は、iPhoneについて言及している場合でも無効と見なされます。iPhone実際には、疑わしい用語の後にセミコロンがありません。

  • Safari8以降はUserAgentString.comにまだ表示されていません

前提条件

  • 次の正規表現は一般的なものです。
  • これは、モバイルデバイスで実行されているSafariユーザーエージェント文字列(SUAS)と一致します(以下のサポートされているデバイスのリストを参照)。
  • 正規表現は、2017年1月20日現在のUserAgentString.comによる既知の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
  • 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行目も更新することを忘れないでください。たとえば、iOS5.xyに一致する場合はを使用します(?:OS\s*5_\d+_\d+\s*)?
8行目。一部のユーザーエージェント文字列は変換されます。その単語likeは外国語に翻訳されるかもしれません。正規表現はとをサポートするようEnglishになりFrenchました。他の言語に遭遇した場合は、この行を適応させてください。12行目も更新することを忘れないでください。
(...)
12行目。8
目を参照してください。13行目を参照してください。7行目を参照してください。たとえば、iOS5.xyと一致する場合はを使用します(?:Version/5\.\d+\.\d+)?\s*)?

于 2012-09-25T10:08:53.957 に答える