Comment puis-je détecter (avec des expressions régulières ou heuristiques) un lien de site web dans une chaîne de caractères de texte comme un commentaire?
Le but est d'éviter le spam. HTML est dépouillé, donc j'ai besoin de détecter des invitations à des copier-coller. Il ne devrait pas être rentable pour un spammeur de poster des liens parce que la plupart des utilisateurs ne pouvaient pas réussi à se mettre à la page. J'aimerais des suggestions, des références, ou des discussions sur les meilleures pratiques.
Certains objectifs:
- La faible fruits mûrs comme bien formé Url (
http://some-fqdn/some/valid/path.ext
) - Url mais sans l'
http://
préfixe (c'est à dire un nom de domaine complet valide + HTTP valide chemin) - Toute autre activité amusante
Bien sûr, je suis blocage du spam, mais le même processus pourrait être utilisé pour l'auto-texte du lien.
Des idées
Voici quelques choses je pense.
- Le contenu est natif de la langue de la prose, donc je peux être à la gâchette facile dans la détection
- Dois-je éliminer tous les espaces tout d'abord, saisir "
www .example.com
"? Serait commun aux utilisateurs de savoir à supprimer l'espace eux-mêmes, ou de faire toute les navigateurs "faire ce que je veux dire" et la bande pour vous? - Peut-être que plusieurs passages est une meilleure stratégie, avec des scans pour:
- Bien formé Url
- Tous les non-blanc, suivi par '.' suivi d'un valide TLD
- Quelque chose d'autre?
Questions Connexes
J'ai lu ces derniers et ils sont maintenant documentés ici, de sorte que vous pouvez simplement les références les regexes dans ces questions si vous le souhaitez.
- remplacer l'URL des Liens HTML, javascript
- Quelle est la meilleure expression régulière pour vérifier si une chaîne est une URL valide
- L'obtention de pièces d'une URL (Regex)
Mise à jour et le Résumé
Wow, j'ai il y a quelques très bonnes heuristiques énumérés ici! Pour moi, le meilleur bang-pour-le-mâle est une synthèse de ce qui suit:
- @Jon Lumineux de la technique de détection des Tld (une bonne défensive goulet d'étranglement)
- Pour ceux suspect chaînes, remplacer le point par un point-à la recherche de caractères comme par @capar
- Un bon point-à la recherche de caractères est @Sharkey est indicée · (c "·"). &midot; est aussi une limite de mot de sorte qu'il est plus difficile de désinvolture, copier et coller.
Que doit faire un spammeur de CPM de faible suffisant pour mes besoins; le "signaler comme inapproprié" les commentaires des utilisateurs doit attraper quoi que ce soit d'autre. D'autres solutions énumérées sont également très utiles:
- Bande toutes les pointillés-quads (@Sharkey commentaire sa propre réponse)
- @Sporkmonger de l'exigence de Javascript côté client, qui insère un nécessaire champ caché dans le formulaire.
- Une requête ping à l'URL serveur-côté pour établir s'il est un site web. (Je pourrais peut-être exécuter le code HTML par SpamAssassin ou un autre filtre Bayésien comme par @Nathan..)
- En regardant de google Chrome source pour son smart barre d'adresse pour voir quels trucs astucieux Google utilise
- Appeler à l'OWASP AntiSAMY ou d'autres services web à des fins de spam/détection de logiciels malveillants.