2009-04-10 113 views
44

我正在練習Ruby和正則表達式來刪除某些不需要的字符。例如:如何刪除特殊字符?

input = input.gsub(/<\/?[^>]*>/, '') 

和特殊字符,例如☻或™:

input = input.gsub('&#', '') 

這樣,只有數字,確定。但是,如果用戶輸入特殊字符作爲密碼,這樣才能這樣:

&#153; 

我的問題: 如何,如果用戶輸入特殊字符不代碼,這樣我可以刪除特殊字符:

™ ☻ 

回答

104

首先,我認爲可能更容易定義什麼構成「正確的輸入」並刪除其他所有內容。例如:

input = input.gsub(/[^0-9A-Za-z]/, '') 

如果這不是你想要的(要支持非拉丁字母,等等),那麼我認爲你應該讓你想刪除(如™或字形的列表☻ ),並逐個刪除它們,因爲很難以編程方式區分中文,阿拉伯文等字符和象形文字。

最後,您可能希望通過轉換爲HTML轉義序列或從HTML轉義序列轉換來標準化您的輸入。

+0

謝謝,我認爲創建允許的字符列表更容易。 – Yud 2009-04-10 12:45:51

+0

謝謝!我使用了`input = input.gsub(/ [^ 0-9A-Za-z] /,'')`來保持字符串不變。它在這些特殊字符的位置給了我一些額外的空間。 – Surya 2012-04-30 12:52:29

8

可以匹配所有你想要的字符,然後加入他們在一起,像這樣:

original = "aøbæcå" 
stripped = original.scan(/[a-zA-Z]/).to_s 
puts stripped 

哪個輸出​​

10

如果你只是想ASCII字符,那麼你可以使用:

original = "aøbauhrhræoeuacå" 
cleaned = "" 
original.each_byte { |x| cleaned << x unless x > 127 } 
cleaned # => "abauhrhroeuac" 
3

一個更簡單的方式來做到由燦伯克Güder回答這個inspirated是:

爲了刪除特殊字符:

input = input.gsub(/\W/, '') 

爲了保持單詞字符:

input = input.scan(/\w/) 

在最後輸入是一樣的!試試看:http://rubular.com/