Comment puis-je supprimer les caractères non alphanumériques d’une chaîne et conserver des espaces?

Je veux créer une regex qui supprime tous les caractères non alphanumériques mais garde des espaces. Cela permet de nettoyer les entrées de recherche avant qu’elles n’atteignent la firebase database. 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?

Ajoutez des espaces au groupe de caractères négatif:

 @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 nombres, je n’inclurais que des chiffres. Par exemple

 @search_query.scan(/[\da-z\s]/i).join 

Une meilleure réponse (au moins en ruby) est:

 @search_query.gsub!(/^(\w|\s*)/,'')