2009-12-15 61 views
3

在有一個訂單確認字符串與一個信用卡號碼,除了最後四位數字主演外的一個軌道項目的工作。什麼是字符串替換的正確方法?在信用卡號碼的紅寶石字符串操作

是什麼讓這個

credit_card_number = "1111111111111111" 

這個操作?

credit_card_number = "************1111" 

感謝,

賢治

回答

9

如果您使用ActiveMerchant:

x.gsub!(/.(?=....)/, '*') 

使用字符串索引這裏有一個方法, ActiveMerchant::Billing::CreditCard有一個名爲display_number的實例方法, XXXX-XXXX-XXXX-4338

如果你不是,複製activemerchant:

def last_digits(number)  
    number.to_s.length <= 4 ? number : number.to_s.slice(-4..-1) 
end 

def mask(number) 
"XXXX-XXXX-XXXX-#{last_digits(number)}" 
end 

credit_card_number = "1111111111111111" 

display_number = mask credit_card_number 
+0

非常感謝史蒂夫! 我正在使用Active Merchant,但由於某種原因,我的訂單對象無法訪問顯示編號方法。儘管如此,你的方法仍然有效。謝謝您的幫助! – 2009-12-15 01:14:37

+0

沒有Probs Kenji!這是因爲它是'ActiveMerchant :: Billing :: CreditCard'的實例方法,不是你的模型。您可以在保存之前使用回調來更新屬性,然後它將持久可用。 – 2009-12-15 01:28:39

+0

很高興知道。如果有必要,我一定會這樣做。 – 2009-12-15 01:57:58

15

這裏有一個正則表達式的方法:

x = '*' * (x.size - 4) + x[-4, 4] 
+0

+1很乾淨的解決方案。 – 2014-02-05 22:20:40

+0

我真的很喜歡第一個。謝謝! – 2016-08-01 07:51:16

2

你可以使用Ruby的gsub方法和正則表達式來隱藏一些賬號串的數字:

hidenumber = "123-123-1234" 
hidenumber.gsub(/(\d{3}-\d{3})/,"xxx-xxx")