如何只屏蔽Ruby字符串的中间部分



我有这个:

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

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

我会从以下内容开始:

phone = '+60123453180'
phone.sub(/(?<=A.{4})(.*)(?=.{4}z)/) { |match| '*' * match.length }
#=> "+601****3180"
phone = "+60123453180"
phone.tap { |p| p[5...8] = "****" }
#⇒ "+6012****3180"

使用5...8范围来修改要替换的符号数量。

NB您的原始代码在处修改了手机,因此上面的代码也在此处修改了手机。

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

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

就地修改phone

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

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

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

相关内容

  • 没有找到相关文章

最新更新