用户代理使用Regex进行解析

时间:2010-11-23 19:29:41

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

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

到目前为止,我正在解析/(iPhone.+OS.+4_2.+Safari)/并且它看起来很有效,但我遇到的问题是,如果您使用的是测试版或未来版本的操作系统,则用户代理可能不会包含{{1但它可能支持Web套接字。

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

  • 如果有4或更大
  • (可选?)其次是

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

先谢谢了! 汤姆。

3 个答案:

答案 0 :(得分:0)

虽然技术上可以完成,但您必须明确列出所有可能的未来版本号。正则表达式是一种文本匹配工具;没有简单的方法来包含逻辑,例如“如果数字大于此值则返回true,如果更小则返回false”。你可能想要只提取数字字符串([0-9]+_[0-9]+或其他东西),然后在输出上做逻辑。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

尽管如此,您可以执行; *CPU +iPhone +OS +(4_(2|[3-9]|\d\d)|[5-9]|\d\d)\[0-9a-zA-Z_]* +like +Mac +OS +X *;

之类的操作