web-dev-qa-db-ja.com

文字列から英数字以外の文字を削除してスペースを保持するにはどうすればよいですか?

英数字以外の文字をすべて削除するがスペースは保持する正規表現を作成したい。これは、データベースにヒットする前に検索入力を消去するためです。ここに私が持っているものがあります:

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

ここでの問題は、すべてのスペースが削除されることです。スペースを保持する方法に関するソリューション?

90
TheExit

否定文字グループにスペースを追加します。

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

この場合、入力を永続的にクリーンアップするために、bangメソッド(gsubではなくgsub!)を使用します。

#permanently filter all non-alphanumeric characters, except _
@search_query.gsub!(/\W/,'')

これにより、@ seach_queryをコード内の別の場所で使用せずに使用する状況を回避できます。

5
nvugteveen

私は包含アプローチを使用していたでしょう。数字以外をすべて除外するのではなく、数字のみを含めます。例えば。

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

たぶん、これはそのような場合に機能します:

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