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

The*_*xit 92 ruby regex ruby-on-rails ruby-on-rails-3

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

@search_query = @search_query.gsub(/[^0-9a-z]/i, '')
Run Code Online (Sandbox Code Playgroud)

这里的问题是它删除了所有空格.如何保留空间的解决方案?

jwu*_*ler 176

向否定字符组添加空格:

@search_query = @search_query.gsub(/[^0-9a-z ]/i, '')
Run Code Online (Sandbox Code Playgroud)

  • 稍微不那么罗嗦:`@ search_query.gsub!(/ [^ 0-9a-z]/i,'')` (4认同)
  • 空的空间对我不起作用,所以'\ s'也可以是一个选项:@ search_query.gsub(/ [^ 0-9a-z \\ s]/i,'') (3认同)
  • 准确地说,这删除了所有重音字母,可能不适合某些语言. (2认同)

小智 5

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

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

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

  • 如果没有匹配,爆炸版将返回nil.可能不是您想要或期望的结果.从文档_"执行String#gsub的替换,返回str,如果没有执行替换则返回nil.如果没有给出块也没有替换,则返回枚举器."_ (2认同)
  • 在他的例子中没有使用返回值,所以这几乎无关紧要。 (2认同)