Я пытаюсь построить регулярное выражение, которое будет оценивать значение true для User-Agent
: s "браузеров, перемещаемых людьми", но false для ботов. Излишне говорить, что совпадение не будет точным, но если все будет правильно, скажем, в 90% случаев это более чем достаточно.
До сих пор мой подход нацелен на строку User-Agent
пяти основных настольных браузеров (MSIE, Firefox, Chrome, Safari, Opera). В частности, я хочу, чтобы regexp NOT соответствовал, если пользовательский агент является ботом (робот Googlebot, msnbot и т.д.).
В настоящее время я использую следующее regexp, которое, как представляется, достигает желаемой точности:
^(Mozilla.*(Gecko|KHTML|MSIE|Presto|Trident)|Opera).*$
Я наблюдал небольшое количество ложных негативов, которые в основном являются мобильными браузерами. Исключения составляют все:
(BlackBerry|HTC|LG|MOT|Nokia|NOKIAN|PLAYSTATION|PSP|SAMSUNG|SonyEricsson)
Мой вопрос: Учитывая желаемый уровень точности, как бы вы улучшили регулярное выражение? Можете ли вы представить какие-либо серьезные ложные срабатывания или ложные отрицания для данного регулярного выражения?
Обратите внимание, что вопрос касается соответствия User-Agent
на основе regexp. Существует множество других подходов к решению этой проблемы, но это выходит за рамки этого вопроса.