Estoy tratando de construir una expresión regular que se evalúe como true para User-Agent
: s de "navegadores navegados por humanos", pero falso para bots. Huelga decir que la coincidencia no será exacta, pero si hace las cosas bien, digamos que el 90% de los casos es más que suficiente.Regexp que coincide con user-agents de navegadores de usuario final pero NO con 90% de precisión
Mi enfoque hasta ahora es apuntar a la cadena User-Agent
de los cinco principales navegadores de escritorio (MSIE, Firefox, Chrome, Safari, Opera). Específicamente, quiero que la expresión regular NO coincida si el usuario-agente es un robot (Googlebot, msnbot, etc.).
Actualmente estoy usando la siguiente expresión regular que aparece para lograr la precisión deseada:
^(Mozilla.*(Gecko|KHTML|MSIE|Presto|Trident)|Opera).*$
que he observado pequeño número de falsos negativos que son sobre todo los navegadores móviles. Las excepciones todos los partidos:
(BlackBerry|HTC|LG|MOT|Nokia|NOKIAN|PLAYSTATION|PSP|SAMSUNG|SonyEricsson)
Mi pregunta es: Teniendo en cuenta el nivel de precisión deseado, ¿cómo mejorar la expresión regular? ¿Puedes pensar en falsos positivos o falsos negativos importantes para la expresión regular dada?
Tenga en cuenta que la pregunta es específicamente sobre la coincidencia con expresiones regulares User-Agent
. Hay muchos otros enfoques para resolver este problema, pero están fuera del alcance de esta pregunta.
¿Cuál de los robots que se identifican como los navegadores? – Macha
Macha: Obviamente se clasificarán como navegadores. Pero mientras estos sean raros, no serán un problema dado el objetivo de precisión establecido. – knorv
Sí, errybody ejecutando un robot a través de su sitio web es honesto. La mejor solución es reconsiderar lo que está haciendo aquí y cómo lo está haciendo. La mayoría de las personas prefiere detectar bots por comportamiento (muchas páginas diferentes en un período de tiempo muy corto) en lugar de agente de usuario. – Will