Анализ агента пользователя с помощью Regex - PullRequest
2 голосов
/ 23 ноября 2010

Я нашел способ онлайн для разделения представлений при просмотре приложения Ruby on Rails на iPhone, и он анализирует пользовательский агент, чтобы обнаружить это.Я специально ориентируюсь на iOS 4.2+, так как предыдущие версии не поддерживают веб-сокеты HTML5, которые мне нужны для моего приложения.

Пока я анализирую /(iPhone.+OS.+4_2.+Safari)/, и кажется, что это работает, но проблема, которую яу меня есть то, что если вы использовали бета-версию или будущую версию ОС, пользовательский агент может не включать 4_2, но он может поддерживать веб-сокеты.

Мой вопрос ... как я могу разобрать строкучтобы получить следующий результат:

  • Если есть 4 или больше
  • (необязательно?), за которым следует что-либо

Мой Regex ужасен, такизвините за глупый вопрос: -)

Спасибо заранее!Том.

Ответы [ 3 ]

0 голосов
/ 23 ноября 2010

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

0 голосов
/ 24 ноября 2010

На самом деле невозможно "надежно" проанализировать строку агента пользователя; несколько общих строк User-Agent нарушают HTTP 1.1 (я забыл номер RFC) WRT символы, разрешенные в скобках (. или / или; или что-то еще?). Перехваты User-Agent довольно хрупки, когда вы хотите «внести в белый список» определенные функции, и приводят к жалобам о предпочтительном подходе к некоторым браузерам по сравнению с другими (особенно когда это делает Microsoft), и это означает, что кто-то должен постоянно обновлять гигантское регулярное выражение. *

Нет ли лучшего способа (например, с помощью JavaScript?) Обнаружить функции, поддерживаемые браузером?

Тем не менее, вы можете сделать что-то вроде ; *CPU +iPhone +OS +(4_(2|[3-9]|\d\d)|[5-9]|\d\d)\[0-9a-zA-Z_]* +like +Mac +OS +X *;.

0 голосов
/ 23 ноября 2010

Хотя технически это можно сделать, вам придется явно перечислить все возможные будущие номера версий.регулярное выражение - инструмент сопоставления текста;нет простого способа включить логику, такую ​​как «вернуть истину, если число больше этого, ложь, если меньше».Возможно, вы захотите просто извлечь числовую строку ([0-9]+_[0-9]+ или что-то в этом роде), а затем выполнить логику на выходе этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...