4

在一个 Rails 项目中工作,其中有一个带有信用卡号的订单确认字符串,除了最后四位数字之外的所有数字都被星标了。进行字符串替换的正确方法是什么?

得到这个的操作是什么

credit_card_number = "1111111111111111"

到这个?

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

谢谢,

健二

4

3 回答 3

17

这是一个正则表达式方法:

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

这是一种使用字符串索引的方法:

x = '*' * (x.size - 4) + x[-4, 4]
于 2009-12-15T00:52:18.603 回答
9

如果您使用的是 ActiveMerchant,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
于 2009-12-15T00:53:37.077 回答
2

您可以使用 Ruby 的gsub方法和正则表达式来隐藏帐号字符串中的一些数字:

hidenumber = "123-123-1234"
hidenumber.gsub(/(\d{3}-\d{3})/,"xxx-xxx")
于 2016-11-22T01:57:06.110 回答