2010-03-12 6 views
2

Quelqu'un pourrait-il me conduire à trouver une expression régulière qui bloque une liste de mots-spams séparés par des virgules que j'ai déjà?Expression régulière - Bloquer le spam

L'expression régulière doit correspondre à une chaîne avec la liste de mots de spam que j'ai déjà.

Ce n'est pas grave, mais j'utilise PHP.

+3

Peu importe, il existe des différences subtiles dans la syntaxe regexp entre les variantes. –

+0

Merci pour la mise à jour :) – Immanuel

Répondre

7

Essayez ceci:

\b(word1|word2|...)\b 

Le \b correspondra entre un caractère mot et un caractère non-mot (de sorte que l'expression ne correspond pas à si les mots apparaissent dans le cadre de un mot plus long).

+0

A travaillé pour moi :) Glad une explication pour '\ b' existait .. – Immanuel

2

Vous pouvez générer une expression régulière correspondant à tout élément contenant un spamword de votre liste en remplaçant les virgules par | et en ajoutant des parenthèses et des limites de mots.

Si votre liste de spam est "spam1,spam2,spam3", votre expression régulière sera "\b(spam1|spam2|spam3)\b".

+1

Soyez prudent avec cela, car il est facile de bloquer accidentellement des mots tels que * chardonnay * si vous ne spécifiez pas les frontières de mots correspondants. –

+0

True ... Je vais éditer dans les limites de mots. – Jens

0

Vous pouvez utiliser JavaScript pour empêcher l'utilisateur de soumettre des données de spam. Tels que:

var spam_words = ["word1", "word2", "word3"]; 
var regex = new RegExp(spam_words.join("|")); 

if(regex.test(form_data_you_wanna_test)){ 
    // stop submit 
}else{ 
    // submit 
} 
+2

C'est inutile. Les contrôles côté client peuvent facilement être contournés, vérifiez toujours du côté serveur. – Qtax