Je veux créer une expression régulière qui supprime tous les caractères non alphanumériques mais garde les espaces. Il s'agit de nettoyer l'entrée de recherche avant qu'elle n'atteigne la base de données. Voici ce que j'ai jusqu'à présent:
@search_query = @search_query.gsub(/[^0-9a-z]/i, '')
Le problème ici est qu'il supprime tous les espaces. Des solutions pour conserver les espaces?
ruby-on-rails
ruby
regex
ruby-on-rails-3
La sortie
la source
la source
Réponses:
Ajoutez des espaces au groupe de caractères annulé:
la source
@search_query.gsub!(/[^0-9a-z ]/i, '')
\s
pas être\\s
Dans ce cas, j'utiliserais la méthode bang (gsub! Au lieu de gsub) afin de nettoyer l'entrée en permanence.
Cela évite une situation où @seach_query est utilisé ailleurs dans le code sans le nettoyer.
la source
J'aurais utilisé l'approche d'inclusion. Plutôt que d'exclure tout sauf les nombres, je n'inclurais que des nombres. Par exemple
la source
Peut-être que cela fonctionnera dans un tel cas:
la source
Une meilleure réponse (au moins en rubis) est:
la source