module PhonenumberJp

Constants

AREA_CODES
VERSION

Public Class Methods

hyphenate(phonenumber) click to toggle source

@param phonenumber [String, nil] @return [String, nil]

# File lib/phonenumber_jp.rb, line 9
def hyphenate(phonenumber)
  parts = split(phonenumber)
  return nil if parts.empty?

  parts.join("-")
end
valid?(phonenumber) click to toggle source

@param phonenumber [String, nil] @return [true, false]

# File lib/phonenumber_jp.rb, line 18
def valid?(phonenumber)
  split(phonenumber).length > 1
end

Private Class Methods

find_area_code(phonenumber) click to toggle source

@param phonenumber [String] @return [String, nil]

# File lib/phonenumber_jp.rb, line 62
def find_area_code(phonenumber)
  AREA_CODES.find {|area_code|
    phonenumber[0..(area_code.length - 1)] == area_code
  }
end
split(phonenumber) click to toggle source

@param phonenumber [String, nil] @return [Array]

# File lib/phonenumber_jp.rb, line 25
def split(phonenumber)
  return [] if phonenumber.nil?

  phonenumber = phonenumber.gsub(/[^0-9\+]/, "")
  return [] if phonenumber.length == 0

  case phonenumber
  when /^\+81/
    local = split("0" + phonenumber[3..-1])
    return [phonenumber] if local.length < 2

    local[0] = local[0][1..-1]
    ["+81"] + local
  when /^(050)(\d\d\d\d)(\d\d\d\d)$/, # IP 電話
      /^(0800)(\d\d\d)(\d\d\d\d)$/, # フリーダイヤル
      /^(0[789]0)(\d\d\d\d)(\d\d\d\d)$/, # 携帯電話・PHS
      /^(020)(\d\d\d\d)(\d\d\d\d)$/, # ポケベル
      /^(0120)(\d\d\d)(\d\d\d)$/, # フリーダイヤル
      /^(0570)(\d\d\d)(\d\d\d)$/, # ナビダイヤル
      /^(0990)(\d\d\d)(\d\d\d)$/ # ダイヤル Q2
    $~.captures
  when /^0(\d{9})$/ # 固定電話
    return [phonenumber] unless (area_code = find_area_code(phonenumber))

    l = area_code.length
    [
      phonenumber[0..(l - 1)],
      phonenumber[l..5],
      phonenumber[6..-1],
    ]
  else
    [phonenumber]
  end
end