【问题标题】:String operation in ruby for credit card numberRuby中信用卡号的字符串操作
【发布时间】:2010-12-26 15:35:30
【问题描述】:

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

得到这个的操作是什么

credit_card_number = "1111111111111111"

这个?

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

谢谢,

健二

【问题讨论】:

    标签: ruby-on-rails ruby string credit-card activemerchant


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我真的很喜欢第一个。谢谢!
    • 我真的很喜欢第二个。谢谢!
    【解决方案2】:

    如果您使用 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
    

    【讨论】:

    • 非常感谢,史蒂夫!我正在使用 Active Merchant,但由于某种原因,我的订单对象无法访问显示编号方法。你的方法确实奏效了。感谢您的帮助!
    • 没有问题 Kenji!这是因为它是ActiveMerchant::Billing::CreditCard 的实例方法,而不是您的模型。您可以在保存之前使用回调来更新属性,然后它将永久可用。
    • 很高兴知道。如果有必要,我一定会这样做。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-10
      • 1970-01-01
      • 1970-01-01
      • 2017-08-06
      • 2022-06-11
      • 1970-01-01
      • 2013-05-02
      • 1970-01-01
      相关资源
      最近更新 更多