【问题标题】: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。
我的问题是.. 我如何解析字符串以获得以下结果:
我的正则表达式很糟糕,所以请原谅这个愚蠢的问题:-)
提前致谢!
汤姆。
【问题讨论】:
标签:
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]+ 或其他内容),然后对其输出执行逻辑。