我想创建一个正则表达式,以删除所有非字母数字字符但保留空格。这是为了在输入进入数据库之前清理搜索输入。以下是我目前的代码:
@search_query = @search_query.gsub(/[^0-9a-z]/i, '')
问题在于它移除了所有的空格。有解决方案可以保留空格吗?
@search_query = @search_query.gsub(/[^0-9a-z]/i, '')
问题在于它移除了所有的空格。有解决方案可以保留空格吗?
在否定字符组中添加空格:
@search_query = @search_query.gsub(/[^0-9a-z ]/i, '')
@search_query.gsub!(/[^0-9a-z ]/i, '')
稍微简洁一些。 - Benjineer\s
而不是 \\s
。 - Dex在这种情况下,我会使用叹号方法(gsub! 而不是 gsub)来永久清除输入内容。
#permanently filter all non-alphanumeric characters, except _
@search_query.gsub!(/\W/,'')
这将避免在代码的其他地方使用未经清理的@seach_query情况发生。
这将防止在代码其他地方使用未经清理的 @search_query。
@search_query.scan(/[\da-z\s]/i).join
或许这个方法适用于这种情况:
# do not replace any word characters and spaces
@search_query = @search_query.gsub(/[^\w ]/g, '')
@search_query.gsub!(/^(\w|\s*)/,'')