如何从字符串中删除非字母数字字符并保留空格?

时间:2011-05-23 23:36:18

标签: ruby-on-rails ruby regex ruby-on-rails-3

我想创建一个正则表达式,删除所有非字母数字字符,但保留空格。这是为了在搜索输入到db之前清理搜索输入。这是我到目前为止所做的:

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

问题在于它删除了所有空格。如何保留空间的解决方案?

5 个答案:

答案 0 :(得分:171)

为否定字符组添加空格:

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

答案 1 :(得分:5)

在这种情况下,我会使用bang方法(gsub!而不是gsub)来永久清理输入。

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

这避免了在不清除代码的情况下在代码中的其他地方使用@seach_query的情况。

答案 2 :(得分:3)

我会使用包含方法。我不会排除除数字之外的所有数字,而只会包含数字。 E.g。

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

答案 3 :(得分:0)

也许可以在这种情况下使用

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

答案 4 :(得分:-3)

更好的答案(至少在红宝石中)是:

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