Validación de coordenadas GPS con regex

Clase 17 de 29Curso de Expresiones Regulares

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.