如何只掩盖Ruby字符串的中间部分?

时间:2016-08-01 08:07:36

标签: ruby regex string ruby-on-rails-4 gsub

我有这个:

phone = "+60123453180"
p = phone.gsub!(/(?=...).(?=....)/, '*')
=> "********3180"

如何仅屏蔽345并返回+6012***3180

3 个答案:

答案 0 :(得分:1)

phone = "+60123453180"
phone.tap { |p| p[5...8] = "****" }
#⇒ "+6012****3180"

使用5...8范围进行游戏以修改要替换的符号数量。

NB 您的原始代码修改了手机 inplace ,因此上面的代码也会在原地进行修改。

为了保持原始值不变,可以使用dup

phone.dup.tap { |p| p[5...8] = "****" }
#⇒ "+6012****3180"
phone
#⇒ "+60123453180"

答案 1 :(得分:1)

我会从这样的事情开始:

if instr(mystring, "`") then
'your code
else
'your code
end if

答案 2 :(得分:1)

修改phone

phone[5..7] = "***"
p phone    # => "+6012***180"

如果每个模糊的角色都应该有一个相应的星号,就像在你的例子中那样,那么最好明确地表示它:

range_to_cover = 5..7
phone[range_to_cover] = "*" * range_to_cover.size