Строковая операция в рубине для номера кредитной карты - PullRequest
3 голосов
/ 15 декабря 2009

Работа над проектом рельсов, где есть строка подтверждения заказа с номером кредитной карты со всеми, кроме последних четырех цифр. Как правильно заменить строку?

Какая операция, чтобы получить это

credit_card_number = "1111111111111111"

к этому?

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

Спасибо

Kenji

Ответы [ 3 ]

15 голосов
/ 15 декабря 2009

Вот подход регулярного выражения:

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

Вот подход с использованием индексации строк:

x = '*' * (x.size - 4) + x[-4, 4]
9 голосов
/ 15 декабря 2009

Если вы используете 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
2 голосов
/ 22 ноября 2016

Вы можете использовать метод Ruby gsub и регулярное выражение, чтобы скрыть некоторые числа в строке номера счета:

hidenumber = "123-123-1234"
hidenumber.gsub(/(\d{3}-\d{3})/,"xxx-xxx")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...