Estou tentando criar uma expressão regular para combinar as coordenadas de latitude / longitude. Para combinar um número de precisão dupla que usei (\-?\d+(\.\d+)?)
, tentei combinar isso em uma única expressão:
^(\-?\d+(\.\d+)?),\w*(\-?\d+(\.\d+)?)$
Eu esperava que isso correspondesse a um duplo, uma vírgula, talvez algum espaço e outro duplo, mas não parece funcionar. Especificamente, só funciona se não houver espaço, não um ou mais. O que eu fiz errado?
Este corresponderá estritamente aos valores de latitude e longitude que estão dentro do intervalo correto:
Partidas
Não corresponde
fonte
?:
sintaxe non grupo de captura, bem como captura de polaridade(^[-+]?(?:[1-8]?\d(?:\.\d+)?|90(?:\.0+)?)),\s*([-+]?(?:180(?:\.0+)?|(?:(?:1[0-7]\d)|(?:[1-9]?\d))(?:\.\d+)?))$
Estou usando esses (formato decimal, com 6 dígitos decimais):
Latitude
Longitude
Aqui está uma essência que testa ambos, relatados aqui também, para facilitar o acesso. É um teste Java TestNG. Você precisa do Slf4j, Hamcrest e Lombok para executá-lo:
fonte
Na verdade, Alix Axel, acima do regex, está errado na latitude, o ponto de vista das faixas de longitude.
As medidas de latitude variam de –90 ° a + 90 ° As medidas de latitude variam de –180 ° a + 180 °
Portanto, o regex fornecido abaixo valida com mais precisão.
Além disso, conforme meu pensamento, ninguém deve restringir o ponto decimal em latitude / longitude.
OU para o objetivo C
fonte
99
porLatitude
, enquanto99
está fora do intervalo de-90, +90
e assim inválido.Repartição do Regex:
-?
# aceitar valores negativos^
# Início da string[0-9]{1,3}
# Corresponde a 1-3 dígitos (ou seja, 0-999)(?:
# Tente combinar ...\.
# um ponto decimal[0-9]{1,10}
# seguido de um a 10 dígitos (ou seja, 0-9999999999))?
# ... opcionalmente$
# Fim da stringfonte
Tente o seguinte:
Confira em:
http://regexpal.com/
Cole a expressão na caixa superior e coloque coisas como esta na caixa inferior:
Repartição do Regex:
Agora, o que isso NÃO faz é restringir-se a esse intervalo:
Em vez disso, ele se restringe a esse intervalo:
Mas o ponto principal é apenas dividir cada pedaço da expressão.
fonte
Aqui está uma versão mais rigorosa:
-90
-+90
-180
-+180
fonte
Pitão:
Latitude:
result = re.match("^[+-]?((90\.?0*$)|(([0-8]?[0-9])\.?[0-9]*$))", '-90.00001')
Longitude:
result = re.match("^[+-]?((180\.?0*$)|(((1[0-7][0-9])|([0-9]{0,2}))\.?[0-9]*$))", '-0.0000')
O Latitude deve falhar no exemplo.
fonte
@ macro-ferrari Eu encontrei uma maneira de reduzi-lo, e sem olhar para o futuro, à luz de todas as conversas recentes sobre mecanismos regex
fonte
Acredito que você esteja usando \ w (caractere de palavra) onde deveria estar usando \ s (espaço em branco). Os caracteres do Word normalmente consistem em [A-Za-z0-9_], de modo que exclui seu espaço, que falha ainda mais na correspondência no sinal de menos opcional ou em um dígito.
fonte
Isso funcionaria para um formato como este: 31 ͦ 37.4 'E
fonte
Rubi
Longitude -179.99999999..180
Latitude -89.99999999..90
fonte
Um método completo e simples no objetivo C para verificar o padrão correto de latitude e longitude é:
em que seekString é a entrada que o usuário digitaria no respectivo campo de texto.
fonte
PHP
Aqui está a versão do PHP (os valores de entrada são:
$latitude
e$longitude
):fonte
Você pode tentar isso:
fonte
Tente o seguinte:
fonte
Tente o seguinte:
fonte