ruby - 用于屏蔽除社会安全号码的最后 4 位以外的所有数字的正则表达式

标签 ruby regex

我有以下字符串

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/

相关文章:

c# - 模式中缺少参数

Javascript 正则表达式仅使用 <li> 标记内的文本替换 <ul> 或 <ol>

Java通过\\S分割

ruby-on-rails - 如何按每个数组中的第二个值对这个数组数组进行排序?

ruby - Rspec 3.0 如何模拟替换参数但没有返回值的方法?

ruby - 在哪里以及如何对模型进行自定义验证?

ruby-on-rails - Rails, Has and belongs to many, 匹配所有条件

Ruby,基于多个字段的数组中的唯一哈希

java - RegExpr 输出不正确

java - 来自缓存字符串的 Pattern.compile() 与缓存已编译模式