我有以下字符串
ssn = "166557649"
我想这样替换它:
ssn = "*****7649"
当我使用花括号并指定一个限制时,不幸的是它用一个“*”替换了所有数字:
ssn.gsub(/\d{5}/,"*")
=> "*7649"
我可以使用方括号替换多个数字,但它最终替换了所有数字:
ssn.gsub(/[0-9]/,"*")
=> "*********"
我也试过这个:
ssn.gsub(/[0-9]{5}/,"*")
=> "*7649"
澄清一下,我想替换除最后 4 位以外的所有数字。换句话说,即使社会保险号有 20 位数字(即使这永远不会发生),也应该将前 16 位数字替换为星号,只保留最后 4 位可见。
最佳答案
为什么还要使用正则表达式?它使它变得比需要的更复杂:
ssn = "166557649"
'*' * 5 + ssn[-4..-1]
=> "*****7649"
简单地提取最后四个字符并将它们附加到一个由五个“*”组成的字符串中。
人们过于频繁地使用正则表达式,而没有考虑是否有更简单、更快速、更易于维护的方法来做同样的事情。
推荐阅读“Regular Expressions: Now You Have Two Problems”。
正如@CarySwoveland 所建议的,这里有一个处理交替长度 SSN 的调整:
ssn = "166557649"
('*' * (ssn.size - 4)) + ssn[-4..-1]
# => "*****7649"
关于ruby - 用于屏蔽除社会安全号码的最后 4 位以外的所有数字的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26103394/