如何在Ruby中使用连字符格式化电话字符串?
我有个无法解决的问题。 我需要编写如何在Ruby中使用连字符格式化电话字符串?,ruby,string-formatting,Ruby,String Formatting,我有个无法解决的问题。 我需要编写phone\u format方法,该方法将接受任何电话字符串,并以3位连字符的形式输出它 电话格式(“555 123 1234”)=>“555-123-12-34” 电话格式(“(+1)888 33x19”)=>“188-833-19” 但如果它以单个数字结尾,如999-9,则将其更改为99-99。理想情况下,它应该是一行程序,而不是真正的一行程序:您需要处理特殊情况 def cut_by(str, cut) str.each_char.each_slice
phone\u format
方法,该方法将接受任何电话字符串,并以3位连字符的形式输出它
电话格式(“555 123 1234”)=>“555-123-12-34”
电话格式(“(+1)888 33x19”)=>“188-833-19”
但如果它以单个数字结尾,如
999-9
,则将其更改为99-99
。理想情况下,它应该是一行程序,而不是真正的一行程序:您需要处理特殊情况
def cut_by(str, cut)
str.each_char.each_slice(cut).map(&:join).join('-')
end
def phone_format(str)
str = str.gsub(/\D/, '') # cleanup
if str.size == 4 # special case 1
cut_by(str, 2)
elsif str.size % 3 == 1 # special case 2
cut_by(str[0..-5], 3) + "-" + cut_by(str[-4..], 2)
else # normal case
cut_by(str, 3)
end
end
不是一句简单的话:你需要处理特殊情况
def cut_by(str, cut)
str.each_char.each_slice(cut).map(&:join).join('-')
end
def phone_format(str)
str = str.gsub(/\D/, '') # cleanup
if str.size == 4 # special case 1
cut_by(str, 2)
elsif str.size % 3 == 1 # special case 2
cut_by(str[0..-5], 3) + "-" + cut_by(str[-4..], 2)
else # normal case
cut_by(str, 3)
end
end
按惯例写的
R = /\d{2,3}(?=\d{2,3}|\z)/
按惯例写的
R = /\d{2,3}(?=\d{2,3}|\z)/
我希望您的第一步是
str.gsub(/\D/,'')
。例如,“(+1)888 33x19.gsub(/\D/,”)#=>“18883319”
@CarySwoveland:他在最后一行看到了。你可能想看看Ruby on Rails的数字到电话的方法。我希望你的第一步是str.gsub(/\D/,”)
。例如,“(+1)888 33x19.gsub(/\D/,”)#=>“18883319”
@CarySwoveland:他做到了,在最后一行中。你可能想看看Ruby on Rails的号码到手机的方法。
doit "555 123 123"
#=> "555-123-123"
doit "555 123 1234"
#=> "555-123-12-34"
doit "555 123 12345"
#=> "555-123-123-45"
doit "(+1) 888 33x19"
#=> "188-833-19"
doit "123"
#=> "123"
doit "1234"
#=> "12-34"