2011-05-23 128 views
80

我想創建一個正則表達式來刪除所有非字母字符但保留空格。這是清理搜索輸入之前,它擊中分貝。這是我到目前爲止:如何從字符串中去除非字母數字字符並保留空格?

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

這裏的問題是它刪除所有的空格。如何保留空間的解決方案?

+0

我不做Rails開發,但爲什麼你不能讓Rails做衛生處理? – 2011-05-24 23:04:41

回答

153

添加空格來否定字符組:

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

空格不適合我,所以'\ s'也可能是一個選項:@ search_query.gsub(/ [^ 0-9a-z \ s]/i,'') – 2013-12-06 12:09:32

+3

羅嗦略少: '@ search_query.gsub!(/ [^ 0-9a-z]/i,'')' – benjineer 2014-07-20 09:49:45

+2

只是爲了確切,刪除所有重音字母,可能不適用於某些語言。 – Oxynum 2015-11-25 16:25:43

-3

一個更好的答案(至少在紅寶石)是:

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

這將刪除(a)單個字符或(b)從字符串開頭的任意數量的空格。完全不相關的問題,因此不是一個答案。 – Sigi 2014-05-04 19:48:34

+1

犯了一個大錯誤。不知道我在想什麼:=( – 2014-05-10 19:03:57

5

在這種情況下,我會使用爆炸方法(GSUB,而不是!的gsub)以便永久清理輸入。

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

這可以避免在代碼中的其他位置使用@seach_query而不清除它的情況。

+2

如果沒有匹配的話,爆炸版本將返回nil,可能不是你想要的結果或者期望的結果從文檔_「執行替換如果沒有替換被執行,String#gsub就緒,返回str,否則爲零。如果沒有給出塊和沒有替換,則返回枚舉器。「_ – dft 2016-01-20 06:45:14

+1

在他的例子中,沒有使用返回值,所以這幾乎是無關。 – 2017-03-22 08:36:08

1

我會使用包含方法。除了排除除數字外的所有數字,我只會包含數字。例如。

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