是否有一种Ruby方式来替换字符串的最后一位数字(不包括空格?

问题描述 投票:0回答:1

我必须找到一种使后四个数字字符匿名的方法。出现电话号码字符串,例如“ +36 6 41 88 75 22”,我希望我的代码输出“ +36 6 41 88 XX XX”。

phoneNumber = "+36 6 41 88 75 22"我找到的最接近我想要的选择的正则表达式是:/\d.{4}$/这很方便,因为lastFour = phone.scan(/\d.{4}$/).join等于“ 75 22”(包括空格)。

现在我想用“ X”代替所有数字(而不是空格!),但是

phoneNumber.gsub(/\d.{4}$/, "X")

输出“ +36 6 41 88 X”,我希望我的代码输出“ +36 6 41 88 XX XX”。

我也尝试了以下麻烦的解决方案:

phoneNumber = "+36 6 41 88 75 22"
def anonymizer(phone)
    lastFour = phone.scan(/\d.{4}$/).join
    anonFour = lastFour.chars
    anonFour.each do |digit|
        digit.gsub(/[0-9]/, "X")
    end
    puts "attempted transform #{anonFour}"
    phone.gsub(lastFour, anonFour.join)
end


phoneyNumber = anonymizer(phoneNumber)
puts phoneyNumber 

无济于事,因为它按原样返回数字(“ +36 6 41 88 75 22”而不是“ +36 6 41 88 XX XX”)]

regex ruby string substitution
1个回答
0
投票

您可以使用

phoneNumber = phoneNumber.gsub(/\d(?=(?:\D*\d){0,3}\D*\z)/, 'X')

请参见regex demoonline Ruby demo

© www.soinside.com 2019 - 2024. All rights reserved.