Elixir library for parsing, formatting, and validating international phone numbers. Based on Google's libphonenumber.
Current metadata version: v8.13.45.
Add :ex_phone_number
to your list of dependencies in mix.exs
:
def deps do
[
{:ex_phone_number, "~> 0.4.5"}
]
end
iex> {:ok, phone_number} = ExPhoneNumber.parse("044 668 18 00", "CH")
{:ok,
%ExPhoneNumber.Model.PhoneNumber{
country_code: 41,
country_code_source: nil,
extension: nil,
italian_leading_zero: nil,
national_number: 446681800,
number_of_leading_zeros: nil,
preferred_domestic_carrier_code: nil,
raw_input: nil
}}
iex> ExPhoneNumber.is_possible_number?(phone_number)
true
iex> ExPhoneNumber.is_valid_number?(phone_number)
true
iex> ExPhoneNumber.get_number_type(phone_number)
:fixed_line
iex> ExPhoneNumber.format(phone_number, :national)
"044 668 18 00"
iex> ExPhoneNumber.format(phone_number, :international)
"+41 44 668 18 00"
iex> ExPhoneNumber.format(phone_number, :e164)
"+41446681800"
iex> ExPhoneNumber.format(phone_number, :rfc3966)
"tel:+41-44-668-18-00"
In E164 formatted numbers the country code can be detected. So you can pass them in to ExPhoneNumber.parse/2
with ""
or nil
as the second argument.
iex> ExPhoneNumber.parse("+977123456789", "")
{:ok,
%ExPhoneNumber.Model.PhoneNumber{
country_code: 977,
country_code_source: nil,
extension: nil,
italian_leading_zero: nil,
national_number: 123456789,
number_of_leading_zeros: nil,
preferred_domestic_carrier_code: nil,
raw_input: nil
}}
There is a mix update_metadata
task that downloads the latest libphonenumber
metadata.
Copyright (c) 2023-2024 ExPhoneNumber
Copyright (c) 2016-2022 NLCollect B.V.
The source code is licensed under The MIT License (MIT)