Lutte contre le spam, exclure des mots #63

Closed
opened 2 months ago by RealET · 8 comments
RealET commented 2 months ago
Collaborator

Bonjour,

Pour lutter contre le spam, je voudrais exclure des mots d'un champ textarea.

J'ai essayé avec une expression régulière :
/^((?!http:|https:|www\.|@).|\n)*$/g
ou
^((?!http:|https:|www\.|@).|\n)*$

Cette regex fonctionne ici : https://regex101.com/r/rZu3Bc/1

Mais dans formidable, aucun texte n'est accepté, qu'il ait les chaînes interdites ou non.

Où est mon erreur ?

Bonjour, Pour lutter contre le spam, je voudrais exclure des mots d'un champ textarea. J'ai essayé avec une expression régulière : `/^((?!http:|https:|www\.|@).|\n)*$/g` ou `^((?!http:|https:|www\.|@).|\n)*$` Cette regex fonctionne ici : https://regex101.com/r/rZu3Bc/1 Mais dans formidable, aucun texte n'est accepté, qu'il ait les chaînes interdites ou non. Où est mon erreur ?
Collaborator

heu... si tu nous donnais un exemple de code plus complet on y comprendrait quelque chose à ton erreur ;-)

heu... si tu nous donnais un exemple de code plus complet on y comprendrait quelque chose à ton erreur ;-)
Poster
Collaborator

En zip parce que .yaml direct, ça passe pas

En zip parce que .yaml direct, ça passe pas
Collaborator

Analyse du problème

  1. Pour vérifier si l'expression regulière passe, la verif regexp utilise preg_match() et non pas preg_match_all(), car a priori cela ne sert à rien dans le cadre originellement prévue pour cette verif de chercher tout les match. Il suffit qu'un seul existe pour que la condition soit remplie
  2. Du coup avec preg_match pas de modificateur global g possible
  3. Ce que tu aurais pu voir en ayant les warnings activés
  4. Quand le parsage de l'expression reg echoue, cela renvoie systématiquement false

Piste

  1. Modifier la chaine de langue pour préciser que les modificateurs autorisés sont ceux de preg_match
  2. Je ne pense pas qu'il faille en revanche faire un tests strict, si l'analyse de l'expression regulière échoue, c'est bien que cela se voit rapidement
  3. Par contre pour ton cas, je me demande s'il faudrait pas plutôt avoir une option à la vérif pour faire un not match plutot qu'un match. Cela serait sans doute plus simple que de faire des regepx inversé.
## Analyse du problème 1. Pour vérifier si l'expression regulière passe, la verif `regexp` utilise `preg_match()` et non pas `preg_match_all()`, car _a priori_ cela ne sert à rien dans le cadre originellement prévue pour cette verif de chercher tout les match. Il suffit qu'un seul existe pour que la condition soit remplie 2. Du coup avec `preg_match` pas de modificateur global `g` possible 3. Ce que tu aurais pu voir en ayant les warnings activés 4. Quand le parsage de l'expression reg echoue, cela renvoie systématiquement `false` ## Piste 1. Modifier la chaine de langue pour préciser que les modificateurs autorisés sont ceux de `preg_match` 2. Je ne pense pas qu'il faille en revanche faire un tests strict, si l'analyse de l'expression regulière échoue, c'est bien que cela se voit rapidement 3. Par contre pour ton cas, je me demande s'il faudrait pas plutôt avoir une option à la vérif pour faire un not match plutot qu'un match. Cela serait sans doute plus simple que de faire des regepx inversé.
Collaborator

Avis de @rastapopoulos bienvenue sur les pistes

Avis de @rastapopoulos bienvenue sur les pistes
Poster
Collaborator

Oui, le not match, ça serait super !

Parce que la regex que j'ai trouvé, elle était vraiment difficile !

Oui, le not match, ça serait super ! Parce que la regex que j'ai trouvé, elle était vraiment difficile !

Toutes les vérifs ont facilement des options donc clairement oui ça serait tout con d'ajouter une case à cocher "Vérifier que ça ne correspond pas au masque" pour ajouter un "!" devant.

Toutes les vérifs ont facilement des options donc clairement oui ça serait tout con d'ajouter une case à cocher "Vérifier que ça ne correspond pas au masque" pour ajouter un "!" devant.
maieul closed this issue 2 months ago
Poster
Collaborator

Super, avec les derniers commits sur vérifier, ça marche avec
/.*(http:|https:|www\.|@).*/i

Merci !

Super, avec les derniers commits sur vérifier, ça marche avec `/.*(http:|https:|www\.|@).*/i` Merci !
Collaborator

Et donc c'est releasé, vu que quelqu'un a pu faire un test sur l'autre PR en attente.

Et donc c'est releasé, vu que quelqu'un a pu faire un test sur l'autre PR en attente.
Sign in to join this conversation.
No Milestone
No Assignees
3 Participants
Notifications
Due Date

No due date set.

Dependencies

This issue currently doesn't have any dependencies.

Loading…
There is no content yet.