dialvalidator parses, validates, formats, and classifies international phone numbers using Google’s libphonenumber metadata. It covers 240+ territories and requires no Java runtime – the metadata is pre-parsed into a native R object and shipped with the package.
phone_valid() checks whether a number is valid for its
territory. Numbers can be supplied in international format (with a
leading +) or national format (with a
default_region):
# International format -- region inferred from country code
phone_valid("+64211234567")
#> [1] TRUE
# National format -- supply the region
phone_valid("021 123 4567", default_region = "NZ")
#> [1] TRUE
# Invalid: too short
phone_valid("+6421")
#> [1] FALSE
# Vectorised
phone_valid(c("+64211234567", "+12125551234", "not a number", "+61412345678"))
#> [1] TRUE TRUE FALSE TRUEThree output formats, matching libphonenumber’s conventions:
# E.164: compact, no spaces, machine-readable
phone_format("+64211234567", "E164")
#> [1] "+64211234567"
# National: how you'd dial it locally
phone_format("+64211234567", "NATIONAL")
#> [1] "021 123 4567"
# International: with country code and spacing
phone_format("+64211234567", "INTERNATIONAL")
#> [1] "+64 21 123 4567"Formatting rules are territory-specific – the same function handles US parenthesised area codes, UK spacing, and every other convention:
phone_type() classifies numbers by matching against
per-territory patterns for each number type:
# NZ mobile
phone_type("+64211234567")
#> [1] "mobile"
# US toll-free
phone_type("+18005551234")
#> [1] "toll_free"Possible types: mobile, fixed_line,
fixed_line_or_mobile, toll_free,
premium_rate, shared_cost,
personal_number, voip, pager,
uan, voicemail, unknown.
phone_country() returns the ISO 3166-1 alpha-2 region
code. For shared country codes like +1 (NANPA), the package resolves the
correct territory using area-code-level patterns:
phone_country(c("+64211234567", "+12125551234", "+14165551234", "+442071234567"))
#> [1] "NZ" "US" "CA" "GB"Note that +1 212 resolves to US (New York) while +1 416 resolves to CA (Toronto).
For batch processing or exploratory analysis,
phone_info() returns everything in a single data frame:
phone_info(c("+64211234567", "+12125551234", "+61412345678", "+81312345678"))
#> raw e164 national international region country_code
#> 1 +64211234567 +64211234567 021 123 4567 +64 21 123 4567 NZ 64
#> 2 +12125551234 +12125551234 (212) 555-1234 +1 212-555-1234 US 1
#> 3 +61412345678 +61412345678 0412 345 678 +61 412 345 678 AU 61
#> 4 +81312345678 +81312345678 03-1234-5678 +81 3-1234-5678 JP 81
#> type valid
#> 1 mobile TRUE
#> 2 fixed_line_or_mobile TRUE
#> 3 mobile TRUE
#> 4 fixed_line TRUEWhen processing numbers from a known country, set
default_region once:
nz_numbers <- c("021 123 4567", "09 300 1234", "0800 123 456")
phone_info(nz_numbers, default_region = "NZ")
#> raw e164 national international region country_code
#> 1 021 123 4567 +64211234567 021 123 4567 +64 21 123 4567 NZ 64
#> 2 09 300 1234 +6493001234 09 300 1234 +64 9 300 1234 NZ 64
#> 3 0800 123 456 +64800123456 0800 123 456 +64 800 123 456 NZ 64
#> type valid
#> 1 mobile TRUE
#> 2 fixed_line TRUE
#> 3 toll_free TRUEYou can inspect the underlying libphonenumber metadata for any territory: