2010-11-23 61 views
2

在iPhone上查看Ruby on Rails应用程序时,我发现了一种在线分隔视图的方法,它解析用户代理以检测此情况。我专门针对iOS 4.2+,因为以前的版本不支持我需要的HTML5 Web套接字。使用正则表达式解析用户代理

到目前为止我解析/(iPhone.+OS.+4_2.+Safari)/和它似乎工作一种享受,但我遇到的问题是,如果你使用的是测试版或OS的未来版本的用户代理可能不包括4_2但它可以支持Web套接字。

我的问题是..我怎么能解析字符串有以下结果:

  • 如果存在4个或更大
  • (可选?),其次是什么

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

感谢先进! 汤姆。

回答

0

这实际上不太可能“可靠”解析用户代理字符串;几个常见的用户代理字符串违反了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 *;

0

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

0

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