Estoy tratando de crear una expresión regular para hacer coincidir las coordenadas de latitud / longitud. Para hacer coincidir un número de doble precisión que he usado (\-?\d+(\.\d+)?), e intenté combinarlo en una sola expresión:
^(\-?\d+(\.\d+)?),\w*(\-?\d+(\.\d+)?)$
Esperaba que esto coincidiera con un doble, una coma, quizás algo de espacio y otro doble, pero no parece funcionar. Específicamente, solo funciona si NO hay espacio, ni uno ni más. ¿Qué he hecho mal?

Éste coincidirá estrictamente con los valores de latitud y longitud que se encuentran dentro del rango correcto:
Partidos
No coincide
fuente
?:sintaxis del grupo de captura, así como la polaridad de captura(^[-+]?(?:[1-8]?\d(?:\.\d+)?|90(?:\.0+)?)),\s*([-+]?(?:180(?:\.0+)?|(?:(?:1[0-7]\d)|(?:[1-9]?\d))(?:\.\d+)?))$Estoy usando estos (formato decimal, con 6 dígitos decimales):
Latitud
Longitud
Aquí hay una esencia que prueba ambos, reportados aquí también, para facilitar el acceso. Es una prueba Java TestNG. Necesitas Slf4j, Hamcrest y Lombok para ejecutarlo:
fuente
En realidad, Alix Axel, la expresión regular anterior es incorrecta en latitud, la longitud varía el punto de vista.
Las mediciones de latitud varían de –90 ° a + 90 ° Las mediciones de longitud varían de –180 ° a + 180 °
Por lo tanto, la expresión regular que figura a continuación se valida con mayor precisión.
Además, según mi pensamiento, nadie debería restringir el punto decimal en latitud / longitud.
O para el objetivo C
fuente
99paraLatitude, mientras99está fuera del intervalo de-90, +90por lo válido.Desglose de expresiones regulares:
-?# aceptar valores negativos^# Inicio de cadena[0-9]{1,3}# Match 1-3 dígitos (es decir, 0-999)(?:# Intenta hacer coincidir ...\.# un punto decimal[0-9]{1,10}# seguido de uno a 10 dígitos (es decir, 0-9999999999))?# ... opcionalmente$# Fin de cadenafuente
Prueba esto:
Compruébalo en:
http://regexpal.com/
Pegue la expresión en el cuadro superior, luego ponga cosas como esta en el cuadro inferior:
Desglose de expresiones regulares:
Ahora, lo que NO hace es restringirse a este rango:
En cambio, se limita a este rango:
Pero el objetivo es principalmente dividir cada parte de la expresión.
fuente
Aquí hay una versión más estricta:
-90-+90-180-+180fuente
Pitón:
Latitud:
result = re.match("^[+-]?((90\.?0*$)|(([0-8]?[0-9])\.?[0-9]*$))", '-90.00001')Longitud:
result = re.match("^[+-]?((180\.?0*$)|(((1[0-7][0-9])|([0-9]{0,2}))\.?[0-9]*$))", '-0.0000')Latitude debería fallar en el ejemplo.
fuente
@ Macro-Ferrari. Encontré una manera de acortarlo, y sin mirar a la luz de todas las conversaciones recientes sobre motores regex
fuente
Creo que estás usando \ w (carácter de palabra) donde deberías estar usando \ s (espacio en blanco). Los caracteres de palabras generalmente consisten en [A-Za-z0-9_], por lo que excluye su espacio, que luego no coincide en el signo menos opcional o un dígito.
fuente
Esto funcionaría para un formato como este: 31 ͦ 37.4 'E
fuente
Rubí
Longitud -179.99999999..180
Latitud -89.99999999..90
fuente
Un método completo y simple en el objetivo C para verificar el patrón correcto de latitud y longitud es:
donde searchString es la entrada que el usuario ingresaría en el campo de texto respectivo.
fuente
PHP
Aquí está la versión de PHP (los valores de entrada son:
$latitudey$longitude):fuente
Puedes probar esto:
fuente
Prueba esto:
fuente
Prueba esto:
fuente