2013-07-03 39 views
0

我刚开始学习正则表达式。我的代码有效,但我想让它变得更好。Ruby中的SSN正则表达式

# Ensure all of the Social Security numbers use dashes for delimiters. 
# Example: 480.01.4430 and 480014430 would both be 480-01-4430. 
def format_ssns(string) 
    string.gsub!(/\./, '-') if string =~ /(\d{9})|(\d{3})\D(\d{2})\D(\d{4})/ 
    string.insert(3, '-') if string =~ /(\d{9})/ 
    string.insert(6, '-') if string =~ /(\d{3})\D(\d{6})/ 
    p string 
end 

format_ssns("234601422, 350.80.0744, 013-60-8762") 
+0

这将更好地问道上http://codereview.stackexchange.com。你的代码有效,但你想改进它。 –

+0

这不是一个问题。这是一个说明OP如何做的声明。 – sawa

回答

1

怎么样s.gsub!(/\D/, '').insert(3, '-').insert(6, '-')

+1

这个问题有很多问题,但我会从这开始:如果没有匹配,'gsub!'返回nil。 – pguardiario

+0

是的,谢谢你指出 –

3

这涵盖了所有3:

string = "234601422, 350.80.0744, 013-60-8762" 
string.gsub /\b(\d{3})\D?(\d{2})\D?(\d{4})\b/, '\1-\2-\3' 
#=> "234-60-1422, 350-80-0744, 013-60-8762"