Validación de coordenadas GPS con regex

Clase 17 de 29Curso de Expresiones Regulares

Contenido del curso

Expresiones Regulares en lenguajes de programación

Resumen

Las coordenadas están en todas partes. Con expresiones regulares bien pensadas puedes validar que una latitud y longitud estén bien formadas en formato decimal o en grados, minutos y segundos (DMS), sin pelearte con rangos numéricos que pertenecen al lenguaje de programación. Aquí tienes patrones prácticos, trucos para CSV y un extra para direcciones de what3words.

¿Cómo validar latitud y longitud con expresiones regulares?

Validar con regex es validar la forma, no el contenido matemático. Así evitas falsos negativos y dejas la lógica de rango a tu lenguaje favorito, como JavaScript o PHP.

¿Por qué validar forma y no valor?

  • Diferencia clave: caracteres vs. valores.
  • La regex garantiza el formato correcto (signo, dígitos, separadores).
  • El lenguaje valida rango (ejemplo: 0–180 o 0–360). No lo fuerces en la regex.
  • Evita sobrevalidar: más mantenible y menos errores.

¿Qué patrón usar para formato decimal?

Coordenada individual con precisión entre 1 y 6 decimales, con signo opcional y punto obligatorio:

-?\d{1,3}\.\d{1,6}

Par lat, long con coma y posible espacio (útil en CSV), anclado a línea completa:

^-?\d{1,3}\.\d{1,6},\s?-?\d{1,3}\.\d{1,6}$

Cuando la línea trae más campos (ejemplo: altitud tras otra coma), puedes permitir el resto con comodín:

^-?\d{1,3}\.\d{1,6},\s?-?\d{1,3}\.\d{1,6},.*$
  • punto y coma del truco: usa .* si puede haber cero o más caracteres. .+ exigiría al menos uno.
  • espacios opcionales en CSV: \s? evita romper el parseo por “espacios de cortesía”.
  • anclajes ^ y $: aseguran que todo sea válido, no solo un fragmento.

¿Cómo construir regex para grados, minutos y segundos (DMS)?

El formato DMS es más legible: grados, minutos, segundos con centésimas, comillas correctas y punto cardinal. Recuerda: la regex valida la forma; el rango (0–60, etc.) lo valida el lenguaje.

¿Qué estructura debe cumplir DMS?

Estructura por coordenada: signo opcional, 1–3 dígitos de grados, espacio, 1–2 dígitos de minutos + comilla simple ', espacio, 1–2 dígitos de segundos + punto + exactamente 2 decimales, comilla doble ", espacio y punto cardinal.

Par DMS anclado, con coma intermedia y posible espacio. Primera coordenada con east/west y segunda con north/south:

^-?\d{1,3} \d{1,2}' \d{1,2}\.\d{2}" [EW],\s?-?\d{1,3} \d{1,2}' \d{1,2}\.\d{2}" [NS]$

Notas rápidas:

  • comillas correctas: ' para minutos y " para segundos.
  • precisión fija en segundos: \d{2} para centésimas; si es 0, conserva 00.
  • error común: confundir [EW] con [NS] entre izquierda y derecha. Asegura el orden correcto.

¿Cómo asegurar líneas bien formadas?

  • usa anclajes ^...$ para que no “cuelen” letras en la cola.
  • si metes una letra en los números, la regex debe fallar, y si no falla, revisa tus clases de caracteres.
  • valores fuera de rango (p. ej., 354°) pueden pasar la regex, y está bien: el lenguaje hará esa validación numérica.

¿Cómo modelar direcciones what3words con regex?

what3words nombra cada cuadrado de 3×3 metros con tres palabras en minúsculas separadas por puntos. Para texto puro, evita atajos como \w porque incluyen dígitos y guion bajo.

¿Qué patrón capta tres palabras separadas por puntos?

Tres palabras con letras a-z, de 3 o más caracteres, separadas por puntos y ancladas:

^[a-z]{3,}\.[a-z]{3,}\.[a-z]{3,}$

Variantes útiles y equivalencias de cuantificadores:

  • equivalente a “tres o más” sin llaves: [a-z][a-z][a-z]+.
  • si la primera letra pudiera ser alfanumérica: ^[a-z0-9][a-z]{2,}\.[a-z]{3,}\.[a-z]{3,}$.

Consejos prácticos:

  • clases de caracteres explícitas evitan sorpresas: no uses \w aquí.
  • cuantificadores: + es uno o más; {3,} es “tres o más”. Ambas formas son válidas.
  • consistencia: decide un estilo y úsalo en todo el patrón.

¿Quieres que revisemos un patrón específico o un ejemplo real de tus datos? Compártelo en los comentarios y lo afinamos juntos.