【发布时间】:2020-01-19 16:08:03
【问题描述】:
我必须找到一种方法来匿名化最后四个数字字符。呈现一个电话号码字符串,如“+36 6 41 88 75 22”(或任何其他格式,如“+36641887522”或+36 6 418 875 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”)
【问题讨论】:
-
您需要澄清(通过编辑您的问题)电话号码可能具有的模式。你举一个例子,最后六个字符是'dd dd',其中'd'代表一个数字。如果您只对该模式感兴趣,那么解决方案很简单。我希望最后四位数字的其他模式是可能的(例如,'d d dd' 或 'd, ext. ddd'),因为这将使它成为一个更有趣的问题。如果第二种解释是可能的,那么给出第二个例子就足够了,它至少在最后四位数字上具有不同的模式。
-
是的,我没有指定我的解决方案需要灵活。它必须适用于 +12 3 456 789 01 和 123 456 7890 和所有其他格式
-
Both my solutions 处理您正确指定的格式。
标签: regex ruby string substitution