PowerShell Advanced — Topic #2

Standardize Phone Numbers

Estandarizar números telefónicos

Convert messy phone values into a clean and consistent format such as 305-555-1234 by removing spaces, dots, parentheses, and other unnecessary characters.

Convertir teléfonos desordenados en un formato limpio y consistente como 305-555-1234, removiendo espacios, puntos, paréntesis y otros caracteres innecesarios.

FocusEnfoque
Single formatFormato único
ToolHerramienta
PowerShell + Regex + Formatting
OutputResultado
Consistent phone numbersTeléfonos consistentes

Cybersecurity & Production Environment Warning

Advertencia de ciberseguridad y ambiente de producción

This exercise is for learning and testing purposes only. Do not run scripts against production data, network shares, official HR files, student records, patient records, enterprise repositories, or business-critical folders without proper authorization, backups, testing, least-privilege permissions, change-control approval, and compliance with your organization’s cybersecurity policies.

Este ejercicio es solo para aprendizaje y pruebas. No ejecutes scripts contra datos de producción, carpetas compartidas, archivos oficiales de recursos humanos, expedientes de estudiantes, expedientes de pacientes, repositorios empresariales o carpetas críticas sin autorización, respaldos, pruebas, permisos mínimos, aprobación de control de cambios y cumplimiento de las políticas de ciberseguridad de tu organización.

Business Scenario

Escenario de negocio

A CSV file contains phone numbers entered in multiple formats. Some values include parentheses, dots, spaces, country codes, or text characters. The goal is to standardize valid 10-digit phone numbers into one clean format for reporting, calling lists, CRM imports, student records, or operational exports.

Un archivo CSV contiene números telefónicos ingresados en múltiples formatos. Algunos valores incluyen paréntesis, puntos, espacios, códigos de país o caracteres de texto. El objetivo es estandarizar teléfonos válidos de 10 dígitos en un formato limpio para reportes, listas de llamadas, importaciones a CRM, expedientes de estudiantes o exportaciones operativas.

(305) 555-1234305.555.1234305 555 12343055551234

Learning Objectives

Objetivos de aprendizaje

Sample Input Data

Data de entrada de ejemplo

EmployeeID,Name,Phone
1001,Juan Carballo,(305) 555-1234
1002,Maria Gonzalez,305.555.7788
1003,Pedro Martinez,305 555 9900
1004,Ana Rodriguez,3055554422
1005,Luis Perez,Phone: 305-555-6611

Step 1 — Define Source and Output Files

Paso 1 — Definir archivos de entrada y salida

$sourceFile = "C:\Training\phones_raw.csv"
$outputFile = "C:\Training\phones_clean.csv"

Step 2 — Import the CSV File

Paso 2 — Importar el archivo CSV

$records = Import-Csv -Path $sourceFile

Step 3 — Remove Non-Numeric Characters

Paso 3 — Remover caracteres no numéricos

The regex pattern \D removes anything that is not a digit. This converts values like (305) 555-1234 into 3055551234.

El patrón regex \D remueve todo lo que no sea un dígito. Esto convierte valores como (305) 555-1234 en 3055551234.

$records | ForEach-Object {
    $cleanPhone = $_.Phone -replace '\D', ''
}

Step 4 — Apply the Standard Format

Paso 4 — Aplicar el formato estándar

After cleaning the value, PowerShell checks whether the phone number has exactly 10 digits. If it does, the value is formatted as ###-###-####.

Después de limpiar el valor, PowerShell verifica si el teléfono tiene exactamente 10 dígitos. Si los tiene, el valor se formatea como ###-###-####.

$records | ForEach-Object {
    $cleanPhone = $_.Phone -replace '\D', ''

    if ($cleanPhone.Length -eq 10) {
        $_.Phone = "{0}-{1}-{2}" -f `
            $cleanPhone.Substring(0,3), `
            $cleanPhone.Substring(3,3), `
            $cleanPhone.Substring(6,4)
    }
}

Step 5 — Export the Cleaned File

Paso 5 — Exportar el archivo limpio

$records | Export-Csv -Path $outputFile -NoTypeInformation -Encoding UTF8

Complete Script

Script completo

# PowerShell Advanced Topic #2
# Standardize Phone Numbers
# Learning / testing environment only

$sourceFile = "C:\Training\phones_raw.csv"
$outputFile = "C:\Training\phones_clean.csv"

$records = Import-Csv -Path $sourceFile

$records | ForEach-Object {
    if ($_.Phone) {
        $cleanPhone = $_.Phone -replace '\D', ''

        if ($cleanPhone.Length -eq 10) {
            $_.Phone = "{0}-{1}-{2}" -f `
                $cleanPhone.Substring(0,3), `
                $cleanPhone.Substring(3,3), `
                $cleanPhone.Substring(6,4)
        }
        else {
            $_.Phone = "INVALID: $($_.Phone)"
        }
    }
}

$records | Export-Csv -Path $outputFile -NoTypeInformation -Encoding UTF8

Write-Host "Phone number standardization completed successfully."
Write-Host "Clean file created at: $outputFile"

Expected Result

Resultado esperado

Before

Antes

NamePhone
Juan Carballo(305) 555-1234
Maria Gonzalez305.555.7788
Pedro Martinez305 555 9900

After

Después

NamePhone
Juan Carballo305-555-1234
Maria Gonzalez305-555-7788
Pedro Martinez305-555-9900

Validation Checklist

Lista de validación

Important Note

Nota importante

This example is designed for standard U.S. 10-digit phone numbers. International numbers, extensions, country codes, or business-specific phone rules may require additional logic.

Este ejemplo está diseñado para teléfonos estándar de Estados Unidos de 10 dígitos. Números internacionales, extensiones, códigos de país o reglas específicas del negocio pueden requerir lógica adicional.

Examples requiring review:
+1 (305) 555-1234 ext. 22
011-52-55-1234-5678
305-555
UNKNOWN
No phone provided

Real-World Use Cases

Casos de uso reales

Call listsStudent recordsPatient recordsCRM importsCustomer filesSMS campaignsOperational reports

Final Takeaway

Conclusión final

This exercise demonstrates how PowerShell can transform inconsistent contact data into a consistent business-ready format. Standardized phone numbers improve reporting quality, reduce manual cleanup, and make downstream communication processes more reliable.

Este ejercicio demuestra cómo PowerShell puede transformar datos de contacto inconsistentes en un formato consistente y listo para el negocio. Los teléfonos estandarizados mejoran la calidad de los reportes, reducen la limpieza manual y hacen más confiables los procesos posteriores de comunicación.