我正在尝试从作为参数传递给方法的字符串格式化社会安全号码:
def format_ssns(string)
ssn = /\d{3}-\d{2}-\d{4}/
return string.gsub(/(\d{3})-(\d{2})-(\d{4})/, '\1-\2-\3')
end
我不明白为什么在我测试时没有格式化我的SSN:
format_ssns("234601422, 350.80.0744, 013-60-8762")
答案 0 :(得分:2)
仅为最后一个SSN执行替换 。您需要告诉正则表达式,不同数字组之间可能存在除-
之外的其他字符。
请改用:
(\d{3})[^\d]?(\d{2})[^\d]?(\d{4})
答案 1 :(得分:0)
您的代码中存在多个错误。第一个是你的正则表达式期望输入已经采用格式
\d\d\d-\d\d-\d\d\d\d
这确实不是真的,没有意义,因为这是你想要实现的格式。 你应该做的是首先将输入标准化为数字列表
234601422 -> 234601422
350.80.0744 -> 350800744
013-60-8762 -> 013608762
然后格式化字符串。
def format_ssns(input)
string = input
string.gsub!(/[^0-9]/, '')
string.gsub!(/(\d{3})(\d{2})(\d{4})/, '\1-\2-\3')
string
end