2013-10-20 43 views
-1

我有一個接收輸入的API例如;如何刪除字符串中的某些字符而不創建空格

@message.to = params[:to]

理想地應當被髮送的輸入像"256773485930"作爲電話號碼。 然而,一些用戶更喜歡發送號碼,如"+256773485930"

我使用@message.to = params[:to].gsub("+", "")嘗試,但它創造這樣

" 256773485930" 

輸入的新字符串添加一個空格。 如何刪除+如果沒有在字符串前面添加空格?

+0

爲什麼不去掉所有非數字字符? 's.gsub(/ \ D /,'')' –

+1

陳述錯誤。 '「+256773485930」.gsub(「+」,「」)'不返回'「256773485930」'。 – sawa

+0

這就是我得到的錯誤,因爲它在它所在的位置創建了一個空間。 – acacia

回答

1

gsub應該可以工作,但可能輸入的字符串也有前面的空格,所以你可以做params[:to].strip.gsub("+", "")這將刪除字符串之前和之後的空格。

如果你想保持數字更強大的不僅是params[:to].gsub(/[^\d]/,"")

+0

感謝這工作得很好! – acacia

0

你可以使用String#[]Regexp

如果Regexp提供,則返回字符串的匹配部分。

實施例:

"+256773485930"[/\d+/] #=> "256773485930" 
0

這是一個常見的問題。前段時間Google開放libphonenumber,它能夠以多種格式解析電話號碼,然後再以不同的標準格式輸出。圖書館被移植到Ruby Gem named global_phone。我會建議使用這個寶石,因爲它可以處理很多我們甚至可能不會想到的邊緣案例。用法示例:

require 'global_phone' 
GlobalPhone.db_path = 'global_phone.json' # see Github page for more info 

# somewhere else 
@message.to = GlobalPhone.normalize(params[:to]) 

這將每個數字轉換爲規範化的E.164國際字符串格式的電話號碼。這意味着轉換後的電話號碼實際上以+開頭,這是存儲電話號碼的「正確」和標準方式。