我想创建一个正则表达式,删除所有非字母数字字符,但保留空格。这是为了在搜索输入到db之前清理搜索输入。这是我到目前为止所做的:
@search_query = @search_query.gsub(/[^0-9a-z]/i, '')
问题在于它删除了所有空格。如何保留空间的解决方案?
答案 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*)/,'')