web-dev-qa-db-fra.com

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

90
TheExit

Ajoutez des espaces au groupe de caractères annulé:

@search_query = @search_query.gsub(/[^0-9a-z ]/i, '')
175
jwueller

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.

5
nvugteveen

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
3
Vadym Tyemirov

Peut-être que cela fonctionnera dans un tel cas:

# do not replace any Word characters and spaces
@search_query = @search_query.gsub(/[^\w ]/g, '')
0
piton4eg