regex match phone number — international and US formats

# US phone: 123-456-7890, (123) 456-7890, 123.456.7890
/(?:\+1[-.\s]?)?\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}/

// JavaScript
const text = 'Call (555) 123-4567 or 555.987.6543';
text.match(/(?:\+1[-.\s]?)?\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}/g)
// ['(555) 123-4567', '555.987.6543']

Validate or extract phone numbers from user input or documents.

International phone numbers (E.164 format)

# E.164: +14155552671 or +44-7911-123456
/\+?[1-9]\d{6,14}/

// Flexible international
/\+?[\d\s().\-]{7,20}/

Python — extract US phone numbers

import re

PHONE_RE = re.compile(r'(?:\+1[-.\s]?)?\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}')
text = 'Contact us at 800-555-0199 or (800) 555-0100.'
PHONE_RE.findall(text)
# ['800-555-0199', '(800) 555-0100']

Normalize a matched phone number to digits only

// JavaScript — strip non-digit characters
function normalize(phone) {
  return phone.replace(/\D/g, '');
}
normalize('(555) 123-4567');  // '5551234567'

Consider a library for production use

libphonenumber-js validates numbers against real carrier data (supports 200+ countries).

npm install libphonenumber-js

import { parsePhoneNumberFromString } from 'libphonenumber-js';
const phone = parsePhoneNumberFromString('+1 650-253-0000', 'US');
phone?.isValid();   // true