0
votes

La matrice Rails comprend uniquement des mots distincts

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 commentaires

Il suffit de faire une autre incluse .... profane_word.include? "'"


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? "" ")


3 Réponses :


0
votes
if profane_words.any? {|word| self.name.downcase.split(' ').include? word} ... end

2 commentaires

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



0
votes

Qu'en est-il d'utiliser une regex? xxx pré>

exemples: p> xxx pré>

(?!) 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>

voir https://www.regular-expressions.info/lookaround. HTML pour référence. P>

Et vous pouvez le rendre plus performant comme celui-ci: P>

self.name.downcase.match? /#{profane_words.join('|')}(?!')/


0 commentaires

0
votes

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 


0 commentaires