Je construis une fonction de recherche de profanation qui doit trouver des instances d'une gamme de mots profanes dans une longue chaîne de texte.
On pourrait faire un simple inclure code> comme: P > if profane_words.any? {|word| self.name.downcase.include? word}
...
end
3 Réponses :
if profane_words.any? {|word| self.name.downcase.split(' ').include? word} ... end
Cela ne fonctionne pas pour quelque chose comme «les anges de l'enfer», car dans ce cas, la question est une apostrophe.
Le mot est divisé par l'espace. Par conséquent, cela devrait fonctionner. ("Hell's anges" .split ('') .include? 'Hell') => Faux
Qu'en est-il d'utiliser une regex? exemples: p> voir https://www.regular-expressions.info/lookaround. HTML pour référence. P> Et vous pouvez le rendre plus performant comme celui-ci: P> (?!) code> est Une recherche négative signifie qu'il ne correspond pas si le mot a un ' code> juste après. Si vous souhaitez exclure d'autres caractères, vous pouvez l'ajouter à la liste avec des tuyaux E.G. (?! '| ") code> ne correspondra pas ' code> et " code>. P> self.name.downcase.match? /#{profane_words.join('|')}(?!')/
Vous devez absolument utiliser une regex contenant tous vos mots profanes suivis d'un espace ou d'une période. BOWN YO
> "Hell's angels".match(/(hell|shit)[ .]/i) => nil > "Hell angels".match(/(hell|shit)[ .]/i) => #<MatchData "Hell " 1:"Hell"> > "Hell's angels shit".match(/(hell|shit)[ .]/i) => nil
Il suffit de faire une autre incluse ....
profane_word.include? "'" code>Je ne vois pas comment ça marche. Ne semble pas répondre à la question.
quelque chose comme
(profane_words_array.include? Votre_word) &&! (votre_word.include? "" ") code>