在iPhone上查看Ruby on Rails应用程序时,我发现了一种在线分离视图的方法,它会解析用户代理以检测这一点。我专门针对iOS 4.2+,因为以前的版本不支持我的应用程序所需的HTML5 Web套接字。
到目前为止,我正在解析/(iPhone.+OS.+4_2.+Safari)/
并且它看起来很有效,但我遇到的问题是,如果您使用的是测试版或未来版本的操作系统,则用户代理可能不会包含{{1但它可能支持Web套接字。
我的问题是..如何解析字符串以获得以下结果:
我的正则表达式非常糟糕,所以请原谅这个愚蠢的问题: - )
先谢谢了! 汤姆。
答案 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 *;
。