Library for parsing, formatting and validating international phone numbers.
Rust
203
252 commits
updated Jul 2, 2026
Rust version of libphonenumber. We currently require 1.88.0 as minimum supported Rust version (MSRV).
Add this to your Cargo.toml:
[dependencies]
phonenumber = "0.3"
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);
}
}
270 followers · starred Nov 2018
121 followers · starred Dec 2024
116 followers · starred Feb 2024
35 followers · starred Oct 2025
Library for parsing, formatting and validating international phone numbers.
Rust
203
252 commits
updated Jul 2, 2026
Rust version of libphonenumber. We currently require 1.88.0 as minimum supported Rust version (MSRV).
Add this to your Cargo.toml:
[dependencies]
phonenumber = "0.3"
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);
}
}
270 followers · starred Nov 2018
121 followers · starred Dec 2024
116 followers · starred Feb 2024
35 followers · starred Oct 2025