Regex para números de teléfono: formatos de EE. UU., E.164 y cuándo parar
La gente escribe el mismo número de teléfono de una docena de maneras. Cómo reconocer números de EE. UU. con guiones, puntos, espacios, paréntesis y un +1 opcional, cómo comprobar el formato internacional E.164 y por qué una validación de verdad necesita una biblioteca.

· 8 min de lectura · Actualizado el
/^\d{3}[-. ]?\d{3}[-. ]?\d{4}$/
atrapa
- 555-123-4567
- 555.123.4567
- 5551234567
deja libre
- 555-1234
- 55-123-4567
- 555-123-456
Pide su número de teléfono a diez personas y te llegará de diez formas: 555-123-4567, (555) 123-4567, 555.123.4567, +1 555 123 4567, 5551234567. Todas son el mismo número.
Una regex de teléfono tiene que aceptar las formas que la gente escribe de verdad y aun así detectar los errores evidentes. Este artículo construye un patrón para EE. UU. pieza a pieza, luego aborda el formato internacional y termina con lo que una regex no puede hacer. Todos los ejemplos son interactivos, así que edita los patrones y mira cómo cambian las líneas.
/^ (\+? 1[-. ]?)? (\(\d{3}\) ?| \d{3}[-. ]?) \d{3}[-. ]?\d{4}$/Un número de EE. UU. de 10 dígitos, con guiones, puntos o espacios opcionales, paréntesis alrededor del código de área y un +1 opcional al principio.
Acepta
- 555-123-4567
- (555) 123-4567
- +1 555.123.4567
Rechaza
- 555-1234
- 55-123-4567
- 555-123-45678
01Empieza por los dígitos
Un número de EE. UU. tiene un código de área de 3 dígitos, un prefijo de central de 3 dígitos y un número de línea de 4. La versión más estricta acepta exactamente un formato:
/^\d{3}-\d{3}-\d{4}$/Debe coincidir1/1
- 555-123-4567
No debe3/3
- 555.123.4567
- 555 123 4567
- 555-1234
Está bien si controlas la máscara de entrada. Si la gente escribe libremente, es demasiado estricta.
02Admite los separadores habituales
Sustituye cada guion por [-. ]?: un guion, un punto o un espacio, y el ? lo hace opcional para que también valgan los dígitos seguidos.
/^\d{3}[-. ]?\d{3}[-. ]?\d{4}$/Debe coincidir4/4
- 555-123-4567
- 555.123.4567
- 555 123 4567
- 5551234567
No debe3/3
- 555-1234
- 55-123-4567
- 555-123-456
Un efecto secundario: cada separador se elige por su cuenta, así que 555-123.4567 también pasa. Normalmente no hace daño. Si quieres que los dos separadores sean iguales, captura el primero y repítelo con una referencia inversa (backreference; hay más en nuestra guía de referencias inversas):
/^\d{3}([-. ]?)\d{3}\1\d{4}$/Debe coincidir2/2
- 555-123-4567
- 5551234567
No debe2/2
- 555-123.4567
- 555 123-4567
03Paréntesis alrededor del código de área
La solución tentadora para (555) 123-4567 es hacer opcional cada paréntesis con \(? y \)?. Eso acepta entradas desequilibradas:
/^\(?\d{3}\)?[-. ]?\d{3}[-. ]?\d{4}$/- (555) 123-4567
- (555-123-4567
- 555) 123-4567
La alternancia lo arregla. O el código de área va entre paréntesis (con un espacio opcional detrás), o va solo (con un separador opcional detrás):
/^(\(\d{3}\) ?|\d{3}[-. ]?)\d{3}[-. ]?\d{4}$/Debe coincidir4/4
- (555) 123-4567
- (555)123-4567
- 555-123-4567
- 555.123.4567
No debe2/2
- (555-123-4567
- 555) 123-4567
04El +1 opcional
El código de país de EE. UU. es 1, y se escribe +1, 1 o se omite por completo. Mételo en un grupo opcional al principio:
/^(\+?1[-. ]?)?(\(\d{3}\) ?|\d{3}[-. ]?)\d{3}[-. ]?\d{4}$/Debe coincidir5/5
- +1 555 123 4567
- 1-555-123-4567
- +1 (555) 123-4567
- 15551234567
- 555-123-4567
No debe2/2
- +44 20 7946 0958
- 555-1234
Es un patrón sólido para un formulario solo para EE. UU.
05Afínalo con las reglas de los códigos de área
Los códigos de área y los prefijos de central reales de EE. UU. (los tres dígitos del medio) nunca empiezan por 0 ni por 1. Cambiar \d{3} por [2-9]\d{2} en esas dos posiciones rechaza el clásico número falso:
/^[2-9]\d{2}[-. ]?[2-9]\d{2}[-. ]?\d{4}$/Debe coincidir2/2
- 212-555-0199
- 415.555.2671
No debe3/3
- 123-456-7890
- 555-012-3456
- 555-123-4567
Si merece la pena depende de tus usuarios. Detecta algunas erratas, y también hace el patrón más difícil de leer.
06Números internacionales: E.164
Fuera de EE. UU., los formatos varían demasiado para un solo patrón. En lugar de intentarlo, la mayoría de los sistemas guardan los números en E.164, el estándar internacional: un +, el código de país y luego el número, sin espacios ni puntuación y con 15 dígitos como máximo. Los códigos de país nunca empiezan por 0.
/^\+[1-9]\d{1,14}$/Debe coincidir3/3
- +15551234567
- +442079460958
- +8613800138000
No debe4/4
- 5551234567
- +1 555 123 4567
- +0123456789
- +1234567890123456
Lo habitual es dejar que la gente escriba su número como quiera, quitar la puntuación y luego comprobar el resultado. Una regex es perfecta para el paso de limpieza:
/[\s().-]/En Python es re.sub(r"[\s().-]", "", number). En JavaScript, number.replace(/[\s().-]/g, "").
07Lo que una regex no puede decirte
^\+[1-9]\d{1,14}$ comprueba la forma. No puede decirte:
- si el código de país existe (
+999no existe, y el patrón lo acepta), - si la longitud es la correcta para ese país (los números de Reino Unido y los de Alemania tienen longitudes distintas, y algunos países mezclan longitudes),
- si el número es un móvil, un fijo o no está asignado,
- si alguien contesta.
Para validar de verdad, usa libphonenumber, la biblioteca de números de teléfono de Google. Conoce el plan de numeración de todos los países y tiene versiones para la mayoría de los lenguajes: phonenumbers en Python y libphonenumber-js en JavaScript. Además formatea los números para mostrarlos y los convierte a E.164 para guardarlos:
import phonenumbers
n = phonenumbers.parse("(212) 555-0199", "US")
phonenumbers.format_number(n, phonenumbers.PhoneNumberFormat.E164) # '+12125550199'
phonenumbers.is_possible_number(n) # True: the length fits the US plan
Y como pasa con las direcciones de email, la única forma de demostrar que un número funciona es enviarle un código.
08Pruébalo
Aquí tienes un tablero de números de teléfono en formatos mezclados. No hace falta comprobar cada formato por separado. Todos los monstruos tienen diez dígitos seguidos (sin contar la puntuación), y ningún inocente los tiene:
Atrapa los números de teléfono completos de EE. UU. y deja libres los cortos.
Objetivos · 0/5 atrapados
- 555-123-4567objetivo
- (555) 123-4567objetivo
- 555.123.4567objetivo
- 5551234567objetivo
- +1 555 123 4567objetivo
Inocentes · 0 errores
- 555-1234inocente
- 12345-6789inocente
- 2026-10-12inocente
- 555-123-456inocente
- 911inocente
Escribe una regex: el tablero se actualiza mientras escribes.
09Lista de comprobación
- Para entradas solo de EE. UU.,
^(\+?1[-. ]?)?(\(\d{3}\) ?|\d{3}[-. ]?)\d{3}[-. ]?\d{4}$cubre los formatos habituales. - Usa alternancia, no dos paréntesis opcionales, para que
(y)vayan siempre en pareja. - Para números internacionales, quita la puntuación con
[\s().-]y guarda en E.164. - Comprueba la forma con
^\+[1-9]\d{1,14}$, y usa libphonenumber cuando importe. - Envía un código si necesitas saber que el número es real.
10Sigue practicando
- La ruta Validadores del mundo real de la Academia cubre códigos postales, fechas, horas, correos electrónicos y más, caza a caza.
- La sección de patrones habituales de la guía tiene más ejemplos interactivos.
- Prueba la caza de hoy o repasa tableros anteriores en el archivo.