Rubyで電話番号データを整形

書いてみました。
http://code.nanigac.com/source/view/733
不正値渡されるとエラー終了してしまいますが、とりあえずデバッグより睡眠を優先。

def tel_format(str)
  ptns = [
    /^(1\d\d)$/,
    /^(0\d\d0)(\d{3})(\d+)$/,
    /^(0\d0)(\d+)(\d{4})$/,
    /^(\d{4})(\d+)(\d{4})$/,
    /^(\d+)(\d{4})$/ ]

  ptns.each{|ptn| 
    if ptn =~ str
      matches = Regexp.last_match.captures   # _, *matches = *$~
      return sprintf(["%s", "%s-%s", "(%s)%s-%s"][matches.length - 1], *matches)
    end
  }
  return
end


["11","110","02202222","0303333333","44444444444","55555"].each{|n|
  puts tel_format(n)
}

実行

$ ruby tel_format.rb 
nil
110
(0220)222-2
(030)333-3333
(4444)444-4444
5-5555