Je veux créer une regex qui supprime tous les caractères non alphanumériques mais conserve des espaces. Ceci est pour nettoyer l'entrée de recherche avant qu'elle frappe 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 des espaces?
Ajoutez des espaces au groupe de caractères annulé:
@search_query = @search_query.gsub(/[^0-9a-z ]/i, '')
Dans ce cas, j'utiliserais la méthode Bang (gsub! Au lieu de gsub) pour nettoyer l'entrée en permanence.
#permanently filter all non-alphanumeric characters, except _
@search_query.gsub!(/\W/,'')
Cela évite une situation où @seach_query est utilisé ailleurs dans le code sans le nettoyer.
J'aurais utilisé l'approche d'inclusion. Plutôt que d'exclure tout sauf les chiffres, je n'incluais que des chiffres. Par exemple.
@search_query.scan(/[\da-z\s]/i).join
Peut-être que cela fonctionnera dans un tel cas:
# do not replace any Word characters and spaces
@search_query = @search_query.gsub(/[^\w ]/g, '')