#numbers #phone #parser #formatter

phonenumber

Library for parsing, formatting and validating international phone numbers

13 releases

0.3.6 8.13.36 Jul 9, 2024
0.3.4 8.13.34 Apr 11, 2024
0.3.3 8.13.9 Sep 19, 2023
0.3.2 8.13.9 Mar 31, 2023
0.1.0 8.7.0 Jul 31, 2017

#35 in Value formatting

Download history 43788/week @ 2024-09-10 43251/week @ 2024-09-17 46373/week @ 2024-09-24 47789/week @ 2024-10-01 40325/week @ 2024-10-08 43451/week @ 2024-10-15 51772/week @ 2024-10-22 45829/week @ 2024-10-29 49947/week @ 2024-11-05 51810/week @ 2024-11-12 54547/week @ 2024-11-19 44542/week @ 2024-11-26 50991/week @ 2024-12-03 52661/week @ 2024-12-10 43872/week @ 2024-12-17 14629/week @ 2024-12-24

173,770 downloads per month
Used in 37 crates (26 directly)

Apache-2.0

13MB
3.5K SLoC

phonenumber

CI Build Crates.io phonenumber License

Rust version of libphonenumber. We currently require 1.58.0 as minimum supported Rust version (MSRV).

Usage

Add this to your Cargo.toml:

[dependencies]
phonenumber = "0.3"

Example

The following example parses, validates and formats the given phone number.

use phonenumber::Mode;
use std::env;

fn main() {
	let mut args = env::args().skip(1).collect::<Vec<_>>();

	if args.len() < 1 {
		panic!("not enough arguments");
	}

	let number  = args.pop().unwrap();
	let country = args.pop().map(|c| c.parse().unwrap());

	let number = phonenumber::parse(country, number).unwrap();
	let valid  = phonenumber::is_valid(&number);

	if valid {
		println!("\x1b[32m{:#?}\x1b[0m", number);
		println!();
		println!("International: {}", number.format().mode(Mode::International));
		println!("     National: {}", number.format().mode(Mode::National));
		println!("      RFC3966: {}", number.format().mode(Mode::Rfc3966));
		println!("        E.164: {}", number.format().mode(Mode::E164));
	}
	else {
		println!("\x1b[31m{:#?}\x1b[0m", number);
	}
}

Dependencies

~5–7MB
~130K SLoC