2010-11-23 28 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)[^+]*