Detección de una URL o un enlace (travieso o agradable) en una cadena de texto

¿Cómo puedo detectar (con expresiones regulares o heurísticas) el enlace de un sitio web en una cadena de texto como un comentario?

El propósito es prevenir el spam. HTML se elimina así que necesito detectar invitaciones para copiar y pegar. @ No debería ser económico para un spammer publicar enlaces porque la mayoría de los usuarios no pudieron acceder con éxito a la página. Quisiera sugerencias, referencias o debates sobre las mejores prácticas.

Algunos objetivos:

La fruta de bajo perfil como URL bien formadas http://some-fqdn/some/valid/path.ext)URLs pero sin lahttp:// prefijo (es decir, un FQDN válido + ruta HTTP válida) Cualquier otro negocio divertido

Por supuesto, estoy bloqueando el correo no deseado, pero podría usarse el mismo proceso para vincular automáticamente el texto.

Ideas

quí hay algunas cosas que estoy pensand

El contenido es en prosa en idioma nativo, por lo que puedo ser feliz en la detección ¿Debo quitar todo el espacio en blanco primero para atrapar "www .example.com "? ¿Los usuarios comunes sabrán eliminar el espacio ellos mismos, o harán cualquier navegador" do-what-I-mean "y se lo quitarán?Maybe múltiples pases es una mejor estrategia, con escaneos para: URL bien formadas Todos los espacios no en blanco seguidos de '.' seguido de cualquier TLD válido¿Algo másPreguntas relacionada

He leído estos y ahora están documentados aquí, por lo que puede hacer referencia a las expresiones regulares en esas preguntas si lo desea.

reemplazar URL con enlaces HTML javascriptCuál es la mejor expresión regular para verificar si una cadena es una URL válid Obtener partes de una URL (Regex) Actualización y resumen

Wow, ¡aquí hay algunas muy buenas heurísticas enumeradas! Para mí, la mejor inversión es una síntesis de lo siguiente:

@ Técnica de Jon Bright para detectar TLD (un buen punto de estrangulamiento defensivo)Para esas cadenas sospechosas, reemplace el punto con un carácter de punto según @ capar Un buen personaje de punto es el subíndice y middot de @ Sharkey; (es decir, "· "). & middot; también es un límite de palabras, por lo que es más difícil copiar y pegar casualmente.

Eso debería hacer que el CPM de un spammer sea lo suficientemente bajo para mis necesidades; la retroalimentación del usuario "marcar como inapropiada" debería captar cualquier otra cosa. Otras soluciones enumeradas también son muy útiles:

Retire todos los quads punteados (comentario de @ Sharkey a su propia respuesta)@ Requisito de Sporkmonger para Javascript del lado del cliente que inserta un campo oculto requerido en el formulario.Pinging el URL del lado del servidor para establecer si es un sitio web. (Tal vez podría ejecutar el HTML a través de SpamAssassin u otro filtro bayesiano según @Nathan ..)Buscando en la fuente de Chrome su barra de direcciones inteligente para ver qué trucos inteligentes usa Google Llamando a OWASP AntiSAMY u otros servicios web para la detección de spam / malware.

Respuestas a la pregunta(13)

Su respuesta a la pregunta