phone number standards

Sent logo
Sent TeamMar 8, 2026 / phone number standards / Article

United Kingdom Phone Numbers: Format, Area Code & Validation Guide

Learn UK phone number formats – from basic structure and area codes to validation with regular expressions. Essential for businesses operating in the UK, developers building telephony applications, and anyone communicating with UK contacts.

United Kingdom Phone Numbers: Format, Area Code & Validation Guide

Learn UK phone number formats – from basic structure and area codes to validation with regular expressions. Essential for businesses operating in the UK, developers building telephony applications, and anyone communicating with UK contacts.

UK Phone Numbering System Overview

Ofcom (Office of Communications) manages the UK's phone numbering system. The system categorizes numbers into several key types:

  • Geographic Numbers: Tied to specific locations. Begin with 01 or 02.
  • Mobile Numbers: Used for mobile phones and wireless devices. Begin with 07.
  • Non-Geographic Numbers: Not linked to a location. Start with 03 (charged at standard geographic rates), 08 (special-rate services), and 09 (premium-rate services).

International Dialing Format

Call the UK from abroad using country code +44. When dialing internationally:

  1. Drop the leading 0 from the UK number
  2. Add the country code +44
  3. Follow with the remaining digits

Examples:

  • UK number: 020 7946 0958 → International: +44 20 7946 0958
  • UK mobile: 07700 900123 → International: +44 7700 900123

The E.164 format is the international standard for phone numbers, limiting them to 15 digits including the country code. Store numbers in E.164 format (e.g., +442079460958) without spaces or formatting. Display formatting can include spaces for readability.

Number Portability

Ofcom regulations make UK phone numbers fully portable. As of April 3, 2023, the "One Touch Switch" process lets you:

  • Keep your phone number when switching providers (both geographic and mobile numbers)
  • Initiate the switch through the new provider only
  • Complete the porting process within one working day for mobile numbers

All UK communications providers are legally required to support number portability. Service providers cannot refuse a porting request, and customers retain the right to port their number at any time without penalty.

Geographic Numbers

Geographic numbers reflect the UK's regional structure. Area codes vary in length from 2 to 5 digits depending on population density and historical network development.

Area Code Structure

Area codes range from 2 to 5 digits (after the initial 0). Shorter area codes serve densely populated areas like major cities, allowing more individual phone numbers.

  • 2-Digit Area Codes (Format: 02X): Major metropolitan areas. Example: 020 for London.
  • 3-Digit Area Codes (Format: 01X1 or 011X): Large areas and cities. Examples: 0117 for Bristol, 0121 for Birmingham.
  • 4-Digit Area Codes (Format: 01XXX): Smaller towns and rural areas. Example: 01946 for Whitehaven.
  • 5-Digit Area Codes (Format: 01XXXX): Less common, found in specific areas due to historical reasons. Examples: 01335 for Ashbourne, 01773 for Belper. Often have shorter local numbers (5 or 6 digits).

Additional Examples by Category:

3-Digit Area Codes:

  • 0113 - Leeds
  • 0114 - Sheffield
  • 0115 - Nottingham
  • 0116 - Leicester
  • 0131 - Edinburgh
  • 0141 - Glasgow
  • 0151 - Liverpool
  • 0161 - Manchester
  • 0191 - Tyne and Wear

4-Digit Area Codes:

  • 01224 - Aberdeen
  • 01382 - Dundee
  • 01472 - Grimsby
  • 01582 - Luton
  • 01733 - Peterborough
  • 01865 - Oxford

Major UK Cities Quick Reference:

CityArea CodeFormatExample
London020(020) xxxx xxxx020 7946 0958
Birmingham0121(0121) xxx xxxx0121 496 0123
Manchester0161(0161) xxx xxxx0161 496 0345
Leeds0113(0113) xxx xxxx0113 496 0678
Glasgow0141(0141) xxx xxxx0141 496 0234
Liverpool0151(0151) xxx xxxx0151 496 0456
Edinburgh0131(0131) xxx xxxx0131 496 0789
Bristol0117(0117) xxx xxxx0117 496 0321
Cardiff029(029) xxxx xxxx029 2018 0123
Belfast028(028) xxxx xxxx028 9018 0456

Geographic Number Format

The standard format for a geographic number is 0XXX XXX XXXX (where XXX represents the area code). Total length is usually 10 digits, or 9 digits in rare cases with 5-digit area codes.

Examples by Area Code Length:

  • 2-digit: 020 7946 0958 (London)
  • 3-digit: 0117 496 0321 (Bristol), 0131 496 0789 (Edinburgh)
  • 4-digit: 01382 654321 (Dundee), 01865 123456 (Oxford)
  • 5-digit: 015396 12345 (Sedbergh), 016977 1234 (Brampton - note: 4-digit local number)

Number Formatting: Display vs. Storage

For Display: Use spaces to group digits for readability:

  • Geographic: 020 7946 0958 or (020) 7946 0958
  • Mobile: 07700 900123
  • International: +44 20 7946 0958

For Storage/Processing: Use E.164 format without spaces:

  • +442079460958 (geographic)
  • +447700900123 (mobile)

This ensures consistency for validation, database storage, and API integration while maintaining user-friendly display formatting.

Mobile Numbers

UK mobile numbers always start with 07 and are 10 digits long. Specific ranges include:

  • 070: Personal Numbering Services – virtual mobile numbers, follow-me services, and personal assistant services. Charged at a higher rate than standard mobile numbers.
  • 071-075 & 077-079: Standard mobile phone services, mobile broadband, and machine-to-machine (M2M) communications. The 077-079 range represents newer allocations and includes legacy paging services and IoT device connectivity.

Mobile Number Examples:

  • 07700 900123 (standard mobile)
  • 07911 123456 (standard mobile)
  • 07400 123456 (standard mobile)
  • 07521 987654 (standard mobile)

MVNO Number Allocation

Mobile Virtual Network Operators (MVNOs) like Giffgaff and Tesco Mobile don't have dedicated number ranges. MVNOs lease network infrastructure from one of four UK Mobile Network Operators (MNOs):

  • EE (BT)
  • Virgin Media O2
  • Vodafone
  • Three

MVNO customers receive numbers from their host network's allocated ranges. Due to number portability, it is not possible to determine a current provider solely from the number prefix—only the original allocating network.

Non-Geographic Numbers

Non-geographic numbers offer businesses and organizations a national presence without being tied to a specific location.

03 Numbers

03 numbers are charged at the same rate as standard geographic calls and are included in mobile phone inclusive minutes. Widely used by:

  • Corporate contact centers
  • Government services
  • Healthcare providers
  • Educational institutions

Examples of 03 Numbers in Use:

  • 0300 200 3300 - UK Government departments
  • 0333 123 4567 - Many corporate helplines
  • 0345 600 4999 - Various business services
  • 0370 000 3000 - National organizations

08 Numbers

08 numbers are special-rate services with varying costs. Ofcom regulations legally require businesses to clearly disclose call charges. Categories include:

  • 0800/0808 (Freephone): Free to call from landlines and mobiles (since July 2015).
  • 0843/0844/0845 (Business Rate): Service charge up to 7p per minute, plus access charge (typically 8p-65p per minute depending on provider).
  • 0870 (Business Rate): Service charge up to 13p per minute, plus access charge.
  • 0871/0872/0873 (Higher Rate): Service charge up to 13p per minute, plus access charge. These are often used for premium support services, entertainment services, and information lines.

Cost Structure (effective July 2015):

All 08 numbers (except 0800/0808) use a two-part charging structure:

  1. Service Charge: Set by the organization you're calling (must be disclosed)
  2. Access Charge: Set by your phone provider (typically 8p-65p per minute from mobiles, up to 16p per minute from landlines)
Number RangeService ChargeTypical Total CostUse Case
0800/0808FreeFreeCustomer service, helplines
0843/0844Up to 7p/min15p-72p/minBusiness contact centers
0845Up to 7p/min15p-72p/minBusiness services
0870Up to 13p/min21p-78p/minCorporate helplines
0871/0872/0873Up to 13p/min21p-78p/minPremium business services

Note: Costs from landlines are generally lower than from mobiles. Check with your provider for exact access charges.

09 Numbers

09 numbers are premium-rate services used for adult entertainment, competitions, and voting lines. These numbers carry the highest call charges – up to £3.60 per minute plus access charges – and may include a connection fee of 5p–£6 per call.

Regulatory Framework:

Ofcom regulates premium-rate services, which must comply with strict consumer protection rules:

  • Price Transparency: Service providers must clearly state all charges before connection
  • Service Charge Caps: 09 numbers are capped at £3.60 per minute plus access charge (source)
  • Age Verification: Required for adult services (typically 098x ranges)
  • Complaint Handling: Consumers can complain to Ofcom about misleading services
  • Advertising Standards: All premium-rate service advertising must clearly display costs

Consumer Protection:

  • Refunds may be available for unauthorized or misleading charges
  • Phone bills must itemize premium-rate calls separately
  • Network providers can block access to 09 numbers upon customer request
  • The Phone-paid Services Authority (formerly PhonepayPlus) handles enforcement and consumer complaints

Validating UK Phone Numbers with Regular Expressions

Validate UK phone numbers using these regular expression patterns based on Ofcom's guidelines:

javascript
// Geographic Numbers (including variations in length)
const geoPattern = /^(?:(?:\+44\s?|0)(?:(?:[1-5]\d{8,9}|[1-5]\d{3}[-\s]?\d{3}[-\s]?\d{3,4})))$/;

// Mobile Numbers
const mobilePattern = /^(?:(?:\+44\s?|0)7(?:[1-5|7-9])\d{8})$/;

// Freephone and Special Rate (0800, 0808, 084x, 087x)
const specialPattern = /^(?:(?:\+44\s?|0)8(?:0(?:0|8)|4[3-4]|7[0-3])\d{7})$/;

// Premium Rate (09)
const premiumPattern = /^(?:(?:\+44\s?|0)9\d{8})$/;

// All UK Numbers (Combined)
const allUkPattern = /^(?:(?:\+44\s?|0)(?:(?:[1-5]\d{8,9}|[1-5]\d{3}[-\s]?\d{3}[-\s]?\d{3,4})|7(?:[1-5|7-9])\d{8}|8(?:0(?:0|8)|4[3-4]|7[0-3])\d{7}|9\d{8}))$/;

Practical Implementation Examples

JavaScript/Node.js:

javascript
function validateUKPhone(phoneNumber) {
  // Sanitize input first
  const sanitized = phoneNumber.replace(/[^\d+]/g, '');

  // Combined UK pattern
  const ukPattern = /^(?:(?:\+44\s?|0)(?:(?:[1-5]\d{8,9}|[1-5]\d{3}[-\s]?\d{3}[-\s]?\d{3,4})|7(?:[1-5|7-9])\d{8}|8(?:0(?:0|8)|4[3-4]|7[0-3])\d{7}|9\d{8}))$/;

  if (ukPattern.test(phoneNumber)) {
    return { valid: true, sanitized };
  }

  return {
    valid: false,
    error: 'Invalid UK phone number format'
  };
}

// Usage
console.log(validateUKPhone('020 7946 0958')); // { valid: true, sanitized: '02079460958' }
console.log(validateUKPhone('+44 7700 900123')); // { valid: true, sanitized: '+447700900123' }

Python:

python
import re

def validate_uk_phone(phone_number):
    """Validate UK phone number and return sanitized E.164 format."""
    # Remove non-digit characters except +
    sanitized = re.sub(r'[^\d+]', '', phone_number)

    # UK phone pattern
    uk_pattern = r'^(?:(?:\+44\s?|0)(?:(?:[1-5]\d{8,9}|[1-5]\d{3}[-\s]?\d{3}[-\s]?\d{3,4})|7(?:[1-5|7-9])\d{8}|8(?:0(?:0|8)|4[3-4]|7[0-3])\d{7}|9\d{8}))$'

    if re.match(uk_pattern, phone_number):
        # Convert to E.164 format
        if sanitized.startswith('0'):
            e164 = '+44' + sanitized[1:]
        elif not sanitized.startswith('+'):
            e164 = '+44' + sanitized
        else:
            e164 = sanitized

        return {'valid': True, 'e164': e164}

    return {'valid': False, 'error': 'Invalid UK phone number format'}

# Usage
print(validate_uk_phone('020 7946 0958'))  # {'valid': True, 'e164': '+442079460958'}
print(validate_uk_phone('07700 900123'))   # {'valid': True, 'e164': '+447700900123'}

Explanation of Regex Components

  • ^ and $: Match the beginning and end of the string, ensuring the entire string is a valid number.
  • (?: ... ): Non-capturing group.
  • \+44\s?|0: Matches either the international prefix "+44" with an optional space or the national trunk prefix "0".
  • \d{n}: Matches exactly n digits.
  • [1-5|7-9]: Matches a single digit within the specified range.
  • [-\s]?: Matches an optional hyphen or whitespace character, allowing different formatting styles.

Edge Cases and Error Handling

Common Validation Challenges:

  1. Mixed formatting: +44 (0)20 7946 0958 - Contains both international code and trunk prefix

    • Solution: Strip the (0) when +44 is present
  2. Wrong length numbers: 020 794 095 - Too short

    • Solution: Validate total digit count (9-10 digits after trunk/country code)
  3. Invalid prefixes: 06xx numbers - Not allocated in UK plan

    • Solution: Explicitly validate against known UK prefix ranges
  4. Crown Dependencies: 01481 (Guernsey), 01534 (Jersey), 01624 (Isle of Man)

    • Note: These use UK +44 code but have different regulatory rules

Error Handling Example:

javascript
function validateWithDetails(phoneNumber) {
  const sanitized = phoneNumber.replace(/[^\d+]/g, '');

  if (sanitized.length < 10) {
    return { valid: false, error: 'Number too short' };
  }

  if (sanitized.length > 13 && sanitized.startsWith('+44')) {
    return { valid: false, error: 'Number too long' };
  }

  // Check for invalid prefixes
  if (/^0[046]/.test(sanitized)) {
    return { valid: false, error: 'Invalid UK number prefix' };
  }

  // Run full validation
  const ukPattern = /^(?:(?:\+44\s?|0)(?:(?:[1-5]\d{8,9})|7(?:[1-5|7-9])\d{8}|8(?:0(?:0|8)|4[3-5]|7[0-3])\d{7}|9\d{8}))$/;

  if (ukPattern.test(phoneNumber)) {
    return { valid: true, sanitized };
  }

  return { valid: false, error: 'Invalid UK phone number format' };
}

Best Practices for Phone Number Validation

  • Sanitize Input: Remove all non-digit characters except the "+" sign before validation.
  • Informative Error Messages: Provide specific error messages to guide users toward correct input.
  • Consider User Experience: Allow various formatting styles (e.g., spaces, hyphens) in user input.
  • Regularly Update Regex: Keep regex patterns up-to-date with Ofcom's numbering plan changes.

Input Sanitization Examples

JavaScript:

javascript
function sanitizePhoneInput(input) {
  // Remove all non-digits except leading +
  let sanitized = input.trim();

  // Preserve leading + and digits only
  if (sanitized.startsWith('+')) {
    sanitized = '+' + sanitized.slice(1).replace(/\D/g, '');
  } else {
    sanitized = sanitized.replace(/\D/g, '');
  }

  // Remove redundant (0) in international format
  sanitized = sanitized.replace(/\+44\s?\(0\)/, '+44');

  return sanitized;
}

// Examples
console.log(sanitizePhoneInput('020 7946 0958'));        // '02079460958'
console.log(sanitizePhoneInput('+44 (0)20 7946 0958'));  // '+442079460958'
console.log(sanitizePhoneInput('(020) 7946-0958'));      // '02079460958'

Python:

python
def sanitize_phone_input(input_str):
    """Sanitize phone number input for validation."""
    sanitized = input_str.strip()

    # Preserve leading + and digits only
    if sanitized.startswith('+'):
        sanitized = '+' + re.sub(r'\D', '', sanitized[1:])
    else:
        sanitized = re.sub(r'\D', '', sanitized)

    # Remove redundant (0) in international format
    sanitized = re.sub(r'\+44\s?\(0\)', '+44', sanitized)

    return sanitized

Troubleshooting Common Validation Failures

IssueSymptomSolution
False negative on valid London number020 7946 0958 fails validationEnsure regex allows for 2-digit area codes with 8-digit local numbers
Mobile number rejected07700900123 fails without spacesAllow for both spaced and non-spaced formats in regex
International format rejected+44 20 7946 0958 failsEnsure regex handles both +44 and 0 prefix alternatives
5-digit area codes fail015396 12345 rejectedAdd support for 9-digit geographic numbers (rare cases)
Crown Dependencies rejected01481 xxxxxx (Guernsey) failsDocument whether your system should support these special cases

Follow these guidelines and use the provided regular expressions to validate UK phone numbers and ensure accurate communication. Understanding UK phone number formats is essential for any developer or business interacting with UK customers.