Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
ハイフン付き電話番号に分割
# encoding: utf-8
module TelSplitter
MAP = {
# 市外局番 , 市内局番の桁数のマップ
# http://www.soumu.go.jp/main_sosiki/joho_tsusin/top/tel_number/number_shitei.html のデータを利用
# 固定電話以外の桁数は適当です...
'050' => 4, # IP電話
'070' => 4, # 携帯電話/PHS
'080' => 4, # 携帯電話
'090' => 4, # 携帯電話
'020' => 3, # その他
'0120' => 3, # その他
'0800' => 3, # その他
'0570' => 3, # その他
'0990' => 3, # その他
# 固定電話
"011"=>3, "0123"=>2, "0124"=>2,
"0125"=>2, "0126"=>2, "01267"=>1,
"0133"=>2, "0134"=>2, "0135"=>2,
"0136"=>2, "01372"=>1, "01374"=>1,
"0137"=>2, "01377"=>1, "0138"=>2,
"01392"=>1, "0139"=>2, "01397"=>1,
"01398"=>1, "0142"=>2, "0143"=>2,
"0144"=>2, "0145"=>2, "01456"=>1,
"01457"=>1, "0146"=>2, "01466"=>1,
"0152"=>2, "0153"=>2, "0154"=>2,
"01547"=>1, "015"=>3, "0155"=>2,
"01558"=>1, "0156"=>2, "01564"=>1,
"0157"=>2, "0158"=>2, "01586"=>1,
"01587"=>1, "0162"=>2, "01632"=>1,
"01634"=>1, "01635"=>1, "0163"=>2,
"0164"=>2, "01648"=>1, "0165"=>2,
"01654"=>1, "01655"=>1, "01656"=>1,
"01658"=>1, "0166"=>2, "0167"=>2,
"0172"=>2, "0173"=>2, "0174"=>2,
"0175"=>2, "0176"=>2, "017"=>3,
"0178"=>2, "0179"=>2, "0182"=>2,
"0183"=>2, "0184"=>2, "0185"=>2,
"0186"=>2, "0187"=>2, "018"=>3,
"0191"=>2, "0192"=>2, "0193"=>2,
"0194"=>2, "0195"=>2, "019"=>3,
"0197"=>2, "0198"=>2, "022"=>3,
"0220"=>2, "0223"=>2, "0224"=>2,
"0225"=>2, "0226"=>2, "0228"=>2,
"0229"=>2, "0233"=>2, "0234"=>2,
"0235"=>2, "023"=>3, "0237"=>2,
"0238"=>2, "0240"=>2, "0241"=>2,
"0242"=>2, "0243"=>2, "0244"=>2,
"024"=>3, "0246"=>2, "0247"=>2,
"0248"=>2, "025"=>3, "0250"=>2,
"0254"=>2, "0255"=>2, "0256"=>2,
"0257"=>2, "0258"=>2, "0259"=>2,
"0260"=>2, "0261"=>2, "026"=>3,
"0263"=>2, "0264"=>2, "0265"=>2,
"0266"=>2, "0267"=>2, "0268"=>2,
"0269"=>2, "0270"=>2, "027"=>3,
"0274"=>2, "0276"=>2, "0277"=>2,
"0278"=>2, "0279"=>2, "0280"=>2,
"0282"=>2, "0283"=>2, "0284"=>2,
"0285"=>2, "028"=>3, "0287"=>2,
"0288"=>2, "0289"=>2, "0291"=>2,
"029"=>3, "0293"=>2, "0294"=>2,
"0295"=>2, "0296"=>2, "0297"=>2,
"0299"=>2, "03"=>4, "0422"=>2,
"042"=>3, "0428"=>2, "04"=>4,
"043"=>3, "0436"=>2, "0438"=>2,
"0439"=>2, "044"=>3, "045"=>3,
"0460"=>2, "046"=>3, "0463"=>2,
"0465"=>2, "0466"=>2, "0467"=>2,
"0470"=>2, "047"=>3, "0475"=>2,
"0476"=>2, "0478"=>2, "0479"=>2,
"048"=>3, "0480"=>2, "049"=>3,
"0493"=>2, "0494"=>2, "0495"=>2,
"04992"=>1, "04994"=>1, "04996"=>1,
"04998"=>1, "052"=>3, "053"=>3,
"0531"=>2, "0532"=>2, "0533"=>2,
"0536"=>2, "0537"=>2, "0538"=>2,
"0539"=>2, "054"=>3, "0544"=>2,
"0545"=>2, "0547"=>2, "0548"=>2,
"0550"=>2, "0551"=>2, "055"=>3,
"0553"=>2, "0554"=>2, "0555"=>2,
"0556"=>2, "0557"=>2, "0558"=>2,
"0561"=>2, "0562"=>2, "0563"=>2,
"0564"=>2, "0565"=>2, "0566"=>2,
"0567"=>2, "0568"=>2, "0569"=>2,
"0572"=>2, "0573"=>2, "0574"=>2,
"0575"=>2, "0576"=>2, "05769"=>1,
"0577"=>2, "0578"=>2, "058"=>3,
"0581"=>2, "0584"=>2, "0585"=>2,
"0586"=>2, "0587"=>2, "059"=>3,
"0594"=>2, "0595"=>2, "0596"=>2,
"0597"=>2, "05979"=>1, "0598"=>2,
"0599"=>2, "06"=>4, "072"=>3,
"0721"=>2, "0725"=>2, "073"=>3,
"0735"=>2, "0736"=>2, "0737"=>2,
"0738"=>2, "0739"=>2, "0740"=>2,
"0742"=>2, "0743"=>2, "0744"=>2,
"0745"=>2, "0746"=>2, "07468"=>1,
"0747"=>2, "0748"=>2, "0749"=>2,
"075"=>3, "0761"=>2, "076"=>3,
"0763"=>2, "0765"=>2, "0766"=>2,
"0767"=>2, "0768"=>2, "0770"=>2,
"0771"=>2, "0772"=>2, "0773"=>2,
"0774"=>2, "077"=>3, "0776"=>2,
"0778"=>2, "0779"=>2, "078"=>3,
"0790"=>2, "0791"=>2, "079"=>3,
"0794"=>2, "0795"=>2, "0796"=>2,
"0797"=>2, "0798"=>2, "0799"=>2,
"082"=>3, "0820"=>2, "0823"=>2,
"0824"=>2, "0826"=>2, "0827"=>2,
"0829"=>2, "083"=>3, "0833"=>2,
"0834"=>2, "0835"=>2, "0836"=>2,
"0837"=>2, "0838"=>2, "08387"=>1,
"08388"=>1, "08396"=>1, "0845"=>2,
"0846"=>2, "0847"=>2, "08477"=>1,
"0848"=>2, "084"=>3, "08512"=>1,
"08514"=>1, "0852"=>2, "0853"=>2,
"0854"=>2, "0855"=>2, "0856"=>2,
"0857"=>2, "0858"=>2, "0859"=>2,
"086"=>3, "0863"=>2, "0865"=>2,
"0866"=>2, "0867"=>2, "0868"=>2,
"0869"=>2, "0875"=>2, "0877"=>2,
"087"=>3, "0879"=>2, "0880"=>2,
"0883"=>2, "0884"=>2, "0885"=>2,
"088"=>3, "0887"=>2, "0889"=>2,
"0892"=>2, "0893"=>2, "0894"=>2,
"0895"=>2, "0896"=>2, "0897"=>2,
"0898"=>2, "089"=>3, "092"=>3,
"0920"=>2, "093"=>3, "0930"=>2,
"0940"=>2, "0942"=>2, "0943"=>2,
"0944"=>2, "0946"=>2, "0947"=>2,
"0948"=>2, "0949"=>2, "09496"=>1,
"0950"=>2, "0952"=>2, "0954"=>2,
"0955"=>2, "0956"=>2, "0957"=>2,
"095"=>3, "0959"=>2, "096"=>3,
"0964"=>2, "0965"=>2, "0966"=>2,
"0967"=>2, "0968"=>2, "0969"=>2,
"0972"=>2, "0973"=>2, "0974"=>2,
"097"=>3, "0977"=>2, "0978"=>2,
"0979"=>2, "098"=>3, "0980"=>2,
"09802"=>1, "0982"=>2, "0983"=>2,
"0984"=>2, "0985"=>2, "0986"=>2,
"0987"=>2, "09912"=>1, "09913"=>1,
"099"=>3, "0993"=>2, "0994"=>2,
"0995"=>2, "0996"=>2, "09969"=>1,
"0997"=>2
}
# 市外局番長毎のマップを作成する
5.downto(2) do |i|
const_set("MAP_#{i}", MAP.reject { |k, v| k.length != i })
end
def self.split(tel)
# 市外局番の長いものから探していく
[MAP_5, MAP_4, MAP_3, MAP_2].each_with_index do |map, index|
len = map.first[0].length
if map.has_key?(tel[0, len])
len_2 = map[tel[0, len]] # 市内局番の長さ
return [tel[0, len], tel[len, len_2], tel[(len + len_2)..-1]]
end
end
# 見つからなかった
return [tel, "", ""]
end
end
@mogya

This comment has been minimized.

Copy link
Owner Author

@mogya mogya commented Jan 30, 2016

duplicated keys removed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment