【问题标题】:User Agent parsing with Regex使用正则表达式解析用户代理
【发布时间】:2010-11-23 19:29:41
【问题描述】:

我在网上找到了一种在 iPhone 上查看 Ruby on Rails 应用程序时分离视图的方法,它会解析用户代理来检测这一点。我专门针对 iOS 4.2+,因为以前的版本不支持我的应用程序需要的 HTML5 Web 套接字。

到目前为止,我正在解析/(iPhone.+OS.+4_2.+Safari)/,它似乎很有效,但我遇到的问题是,如果您使用的是测试版或未来版本的操作系统,用户代理可能不包括4_2,但它可能支持 Web Sockets。

我的问题是.. 我如何解析字符串以获得以下结果:

  • 如果有 4 或更大
  • (可选?)后跟任何内容

我的正则表达式很糟糕,所以请原谅这个愚蠢的问题:-)

提前致谢! 汤姆。

【问题讨论】:

    标签: iphone regex ruby-on-rails-3 user-agent


    【解决方案1】:

    实际上不可能“可靠地”解析用户代理字符串;几个常见的 User-Agent 字符串违反了 HTTP 1.1(我忘记了 RFC 编号)WRT 括号之间允许的字符(. 或 / 或 ; 或其他什么?)。当您想将某些功能“列入白名单”时,User-Agent 嗅探非常脆弱,并导致抱怨某些浏览器优先于其他浏览器(尤其是当微软这样做时),这意味着有人必须保持巨大的正则表达式更新。

    真的没有更好的方法(例如使用 JavaScript?)来检测浏览器支持的功能吗?

    不过,您可以执行; *CPU +iPhone +OS +(4_(2|[3-9]|\d\d)|[5-9]|\d\d)\[0-9a-zA-Z_]* +like +Mac +OS +X *; 之类的操作。

    【讨论】:

      【解决方案2】:

      虽然这在技术上可以做到,但您必须明确列出所有可能的未来版本号。 regex 是一个文本匹配工具;没有简单的方法来包含诸如“如果数字大于此,则返回 true,如果小于此,则返回 false”之类的逻辑。您可能只想提取数字字符串([0-9]+_[0-9]+ 或其他内容),然后对其输出执行逻辑。

      【讨论】:

        【解决方案3】:

        ([5-9]|\d\d)[^+]*

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-01-03
          • 2011-05-22
          • 2012-04-20
          • 1970-01-01
          • 1970-01-01
          • 2015-07-08
          • 2012-08-23
          相关资源
          最近更新 更多