Validar nombres propios con regex

Clase 18 de 29Curso de Expresiones Regulares

Resumen

Validar nombres propios con expresiones regulares es un reto que cambia entre países. Aun así, es posible partir de reglas simples: evitar dígitos, respetar mayúsculas y minúsculas y modelar espacios para nombres compuestos. Aquí verás cómo construir un patrón básico y cómo pensar en cuantificadores como +, ?, y los modos greedy y lazy.

¿Cómo validar nombres propios con regex en distintos países?

Empezar por lo local ayuda. La idea es reconocer si una línea contiene un nombre de persona de forma sencilla. Se asume que cada línea inicia con un nombre, que no hay dígitos y que la primera letra va en mayúscula. Luego se puede crecer hacia nombres compuestos y apellidos según la costumbre local.

¿Qué reglas básicas aplicar: mayúsculas, dígitos y espacios?

  • No usar dígitos: si hay números, es raro que sea un nombre.
  • Iniciar con mayúscula: primera letra A-Z.
  • Continuar en minúsculas: tres o más letras para longitudes de cuatro o más.
  • Manejar espacios con cuidado: "Juan Pablo" requiere un espacio opcional y otro bloque con mayúscula.
  • Reconocer excepciones: apellidos como McCarthy o McGregor tienen mayúsculas intermedias y complican el patrón.

Ejemplo de nombre simple (solo nombre, sin apellidos), asumiendo líneas que empiezan con el nombre:

^[A-Z][a-z]{3,}$

¿Cómo usar anclas y flags case-insensitive?

El ancla ^ fuerza a que la coincidencia empiece al inicio de la línea. Si se activa el flag insensitive (i), se ignoran mayúsculas/minúsculas; pero aquí se necesita respetar el caso: mayúscula inicial y resto en minúsculas. Por eso, el patrón se construye sin el flag i.

  • Con respeto a mayúsculas/minúsculas: se omite i.
  • Si se usa i por error: la mayúscula inicial dejaría de ser una condición confiable.

¿Qué cuantificadores escoger: +, ?, greedy o lazy?

  • {3,}: exige al menos tres minúsculas después de la inicial.
  • ?: útil para marcar un bloque como opcional (por ejemplo, un segundo nombre).
  • +: suma uno o más caracteres cuando el bloque es obligatorio.
  • Greedy vs lazy: define si el patrón captura lo máximo o lo mínimo posible; al validar nombres, esto afecta cómo se expanden bloques opcionales.

Para un nombre compuesto como "Juan Pablo" (espacio opcional y segundo nombre con mayúscula):

^[A-Z][a-z]{3,}(?: [A-Z][a-z]*)?$

¿Cómo manejar nombres compuestos y apellidos con mayúsculas internas?

Los apellidos irlandeses como McCarthy o McGregor introducen mayúsculas en medio, lo que vuelve el patrón más complejo. Una estrategia práctica es resolver primero el nombre y, más adelante, extender a apellidos según la costumbre local. Si hay comas u otros separadores, conviene definir si se trabajará línea por línea o por campos.

  • Empezar por el nombre sin apellidos.
  • Añadir soporte para segundo nombre con bloque opcional.
  • Posponer reglas para apellidos con mayúsculas internas.
  • Evitar suposiciones fuertes cuando haya comas u otros separadores.

Ejemplo sin comas, con segundo nombre opcional (a partir de un nombre válido):

^[A-Z][a-z]{3,}(?: [A-Z][a-z]*)?$

¿Qué estrategia práctica seguir para mejorar la precisión?

La validación perfecta es difícil: el usuario puede escribir mal y hay variaciones culturales. Aun así, se puede aumentar la probabilidad de acierto combinando reglas y decisiones prácticas.

  • Capitalizar cuando sea posible: llevar la primera letra a mayúscula.
  • Validar contra el patrón: detectar si cumple estructura básica.
  • Usar una lista corta de nombres frecuentes (15–20) del país: aumentar la probabilidad de acierto en detección línea completa.
  • Iterar según la costumbre local: nombre o nombres y apellido o apellidos.
  • Probar diferentes cuantificadores: decidir cuándo va +, cuándo ?, y cómo afecta greedy/lazy a los matches.

Ejemplo de flujo simple:

1) Normalizar: capitalizar la primera letra.
2) Validar: aplicar ^[A-Z][a-z]{3,}(?: [A-Z][a-z]*)?$.
3) Comprobar: si se requiere, verificar si el nombre está en la lista local de más usados.

¿Tienes un caso real con nombres compuestos o apellidos particulares? Compártelo y probamos el patrón juntos.