Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Ruby中使用连字符格式化电话字符串?_Ruby_String Formatting - Fatal编程技术网

如何在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"