我正在練習Ruby和正則表達式來刪除某些不需要的字符。例如:如何刪除特殊字符?
input = input.gsub(/<\/?[^>]*>/, '')
和特殊字符,例如☻或:
input = input.gsub('&#', '')
這樣,只有數字,確定。但是,如果用戶輸入特殊字符作爲密碼,這樣才能這樣:
™
我的問題: 如何,如果用戶輸入特殊字符不代碼,這樣我可以刪除特殊字符:
™ ☻
我正在練習Ruby和正則表達式來刪除某些不需要的字符。例如:如何刪除特殊字符?
input = input.gsub(/<\/?[^>]*>/, '')
和特殊字符,例如☻或:
input = input.gsub('&#', '')
這樣,只有數字,確定。但是,如果用戶輸入特殊字符作爲密碼,這樣才能這樣:
™
我的問題: 如何,如果用戶輸入特殊字符不代碼,這樣我可以刪除特殊字符:
™ ☻
首先,我認爲可能更容易定義什麼構成「正確的輸入」並刪除其他所有內容。例如:
input = input.gsub(/[^0-9A-Za-z]/, '')
如果這不是你想要的(要支持非拉丁字母,等等),那麼我認爲你應該讓你想刪除(如™或字形的列表☻ ),並逐個刪除它們,因爲很難以編程方式區分中文,阿拉伯文等字符和象形文字。
最後,您可能希望通過轉換爲HTML轉義序列或從HTML轉義序列轉換來標準化您的輸入。
可以匹配所有你想要的字符,然後加入他們在一起,像這樣:
original = "aøbæcå"
stripped = original.scan(/[a-zA-Z]/).to_s
puts stripped
哪個輸出
如果你只是想ASCII字符,那麼你可以使用:
original = "aøbauhrhræoeuacå"
cleaned = ""
original.each_byte { |x| cleaned << x unless x > 127 }
cleaned # => "abauhrhroeuac"
您可以使用parameterize:
'@!#$%^&*()111'.parameterize
=> "111"
一個更簡單的方式來做到由燦伯克Güder回答這個inspirated是:
爲了刪除特殊字符:
input = input.gsub(/\W/, '')
爲了保持單詞字符:
input = input.scan(/\w/)
在最後輸入是一樣的!試試看:http://rubular.com/
謝謝,我認爲創建允許的字符列表更容易。 – Yud 2009-04-10 12:45:51
謝謝!我使用了`input = input.gsub(/ [^ 0-9A-Za-z] /,'')`來保持字符串不變。它在這些特殊字符的位置給了我一些額外的空間。 – Surya 2012-04-30 12:52:29