如何只屏蔽 Ruby 字符串的中间部分?
How to only mask middle part of Ruby string?
我有这个:
phone = "+60123453180"
p = phone.gsub!(/(?=...).(?=....)/, '*')
=> "********3180"
如何只屏蔽 345
和 return +6012***3180
?
phone = "+60123453180"
phone.tap { |p| p[5...8] = "****" }
#⇒ "+6012****3180"
使用 5...8
范围来修改要替换的符号数量。
NB 您的原始代码修改了 phone inplace,因此上面的代码也修改了它。
要保持原始值不变,可以使用 dup
:
phone.dup.tap { |p| p[5...8] = "****" }
#⇒ "+6012****3180"
phone
#⇒ "+60123453180"
我会从这样的事情开始:
phone = '+60123453180'
phone.sub(/(?<=\A.{4})(.*)(?=.{4}\z)/) { |match| '*' * match.length }
#=> "+601****3180"
原地修改phone
:
phone[5..7] = "***"
p phone # => "+6012***180"
如果每个被遮盖的字符都应该有一个对应的星号,如您的示例所示,那么明确表示该星号可能会更好:
range_to_cover = 5..7
phone[range_to_cover] = "*" * range_to_cover.size
我有这个:
phone = "+60123453180"
p = phone.gsub!(/(?=...).(?=....)/, '*')
=> "********3180"
如何只屏蔽 345
和 return +6012***3180
?
phone = "+60123453180"
phone.tap { |p| p[5...8] = "****" }
#⇒ "+6012****3180"
使用 5...8
范围来修改要替换的符号数量。
NB 您的原始代码修改了 phone inplace,因此上面的代码也修改了它。
要保持原始值不变,可以使用 dup
:
phone.dup.tap { |p| p[5...8] = "****" }
#⇒ "+6012****3180"
phone
#⇒ "+60123453180"
我会从这样的事情开始:
phone = '+60123453180'
phone.sub(/(?<=\A.{4})(.*)(?=.{4}\z)/) { |match| '*' * match.length }
#=> "+601****3180"
原地修改phone
:
phone[5..7] = "***"
p phone # => "+6012***180"
如果每个被遮盖的字符都应该有一个对应的星号,如您的示例所示,那么明确表示该星号可能会更好:
range_to_cover = 5..7
phone[range_to_cover] = "*" * range_to_cover.size