위도 / 경도 좌표를 일치시키는 정규식을 만들려고합니다. 배정 밀도 숫자를 일치시키기 위해을 사용 (\-?\d+(\.\d+)?)하고 단일 표현식으로 결합하려고했습니다.
^(\-?\d+(\.\d+)?),\w*(\-?\d+(\.\d+)?)$
나는 이것이 더블, 쉼표, 아마도 약간의 스페이스 및 다른 더블과 일치 할 것으로 예상했지만 작동하지 않는 것 같습니다. 특히 하나 이상의 공간이없는 경우에만 작동합니다. 내가 뭘 잘못 했니?
답변
공백은 \ w가 아니라 \ s입니다.
^(-?\d+(\.\d+)?),\s*(-?\d+(\.\d+)?)$
이것이 작동하는지 확인하십시오
답변
이것은 올바른 범위에 속하는 위도 및 경도 값과 엄격하게 일치합니다.
^[-+]?([1-8]?\d(\.\d+)?|90(\.0+)?),\s*[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$
성냥
- +90.0, -127.554334
 - 45, 180
 - -90, -180
 - -90.000, -180.0000
 - +90, +180
 - 47.1231231, 179.99999999
 
일치하지 않습니다
- -90., -180.
 - +90.1, -100.111
 - -91, 123.456
 - 045, 180
 
답변
다음 중 하나를 사용하고 있습니다 (10 진수 6 자리).
위도
^(\+|-)?(?:90(?:(?:\.0{1,6})?)|(?:[0-9]|[1-8][0-9])(?:(?:\.[0-9]{1,6})?))$
경도
^(\+|-)?(?:180(?:(?:\.0{1,6})?)|(?:[0-9]|[1-9][0-9]|1[0-7][0-9])(?:(?:\.[0-9]{1,6})?))$
다음 은 액세스 용이성을 위해 두 가지를 모두 테스트하는 요지입니다. Java TestNG 테스트입니다. Slf4j, Hamcrest 및 Lombok이 필요합니다.
import static org.hamcrest.Matchers.*;
import static org.hamcrest.MatcherAssert.*;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import lombok.extern.slf4j.Slf4j;
import org.testng.annotations.Test;
@Slf4j
public class LatLongValidationTest {
    protected static final String LATITUDE_PATTERN="^(\\+|-)?(?:90(?:(?:\\.0{1,6})?)|(?:[0-9]|[1-8][0-9])(?:(?:\\.[0-9]{1,6})?))$";
    protected static final String LONGITUDE_PATTERN="^(\\+|-)?(?:180(?:(?:\\.0{1,6})?)|(?:[0-9]|[1-9][0-9]|1[0-7][0-9])(?:(?:\\.[0-9]{1,6})?))$";
    @Test
    public void latitudeTest(){
        DecimalFormat df = new DecimalFormat("#.######");
        df.setRoundingMode(RoundingMode.UP);
        double step = 0.01;
        Double latitudeToTest = -90.0;
        while(latitudeToTest <= 90.0){
            boolean result = df.format(latitudeToTest).matches(LATITUDE_PATTERN);
            log.info("Latitude: tested {}. Result (matches regex): {}", df.format(latitudeToTest), result);
            assertThat(result, is(true));
            latitudeToTest += step;
        }
        latitudeToTest = -90.1;
        while(latitudeToTest >= -200.0){
            boolean result = df.format(latitudeToTest).matches(LATITUDE_PATTERN);
            log.info("Latitude: tested {}. Result (matches regex): {}", df.format(latitudeToTest), result);
            assertThat(result, is(false));
            latitudeToTest -= step;
        }
        latitudeToTest = 90.01;
        while(latitudeToTest <= 200.0){
            boolean result = df.format(latitudeToTest).matches(LATITUDE_PATTERN);
        log.info("Latitude: tested {}. Result (matches regex): {}", df.format(latitudeToTest), result);
            assertThat(result, is(false));
            latitudeToTest += step;
        }
    }
    @Test
    public void longitudeTest(){
        DecimalFormat df = new DecimalFormat("#.######");
        df.setRoundingMode(RoundingMode.UP);
        double step = 0.01;
        Double longitudeToTest = -180.0;
        while(longitudeToTest <= 180.0){
            boolean result = df.format(longitudeToTest).matches(LONGITUDE_PATTERN);
            log.info("Longitude: tested {}. Result (matches regex): {}", df.format(longitudeToTest), result);
            assertThat(result, is(true));
            longitudeToTest += step;
        }
        longitudeToTest = -180.01;
        while(longitudeToTest >= -300.0){
            boolean result = df.format(longitudeToTest).matches(LONGITUDE_PATTERN);
            log.info("Longitude: tested {}. Result (matches regex): {}", df.format(longitudeToTest), result);
            assertThat(result, is(false));
            longitudeToTest -= step;
        }
        longitudeToTest = 180.01;
        while(longitudeToTest <= 300.0){
            boolean result = df.format(longitudeToTest).matches(LONGITUDE_PATTERN);
            log.info("Longitude: tested {}. Result (matches regex): {}", df.format(longitudeToTest), result);
            assertThat(result, is(false));
            longitudeToTest += step;
        }
    }
}
답변
실제로 정규식 위의 Alix Axel은 위도, 경도 범위의 관점에서 잘못되었습니다.
위도 측정 범위는 –90 ° ~ + 90 °입니다. 경도 측정 범위는 –180 ° ~ + 180 °입니다.
따라서 아래에 주어진 정규식이 더 정확하게 검증됩니다. 
또한 내 생각에 따라 아무도 위도 / 경도로 소수점을 제한해서는 안됩니다.
^([-+]?\d{1,2}([.]\d+)?),\s*([-+]?\d{1,3}([.]\d+)?)$
또는 목표 C의 경우
^([-+]?\\d{1,2}([.]\\d+)?),\\s*([-+]?\\d{1,3}([.]\\d+)?)$
답변
^-?[0-9]{1,3}(?:\.[0-9]{1,10})?$
정규식 분석 :
^-?[0-9]{1,3}(?:\.[0-9]{1,10})?$
-?           # 음수 값 허용
^            # 문자열의 시작
[0-9]{1,3}   # 1 ~ 3 자리 숫자 (예 : 0-999)
(?:          # 일치하려고 …
\.          # 소수점
[0-9]{1,10}  # 다음에 1 ~ 10 자리 숫자 (예 : 0-9999999999)
)?           # … 선택적으로
$            # 문자열의 끝
답변
이 시도:
^(\()([-+]?)([\d]{1,2})(((\.)(\d+)(,)))(\s*)(([-+]?)([\d]{1,3})((\.)(\d+))?(\)))$
다음에서 확인하십시오.
상단 상자에 표현식을 붙여 넣은 다음 하단 상자에 다음과 같은 것을 넣습니다.
(80.0123, -34.034)
(80.0123)
(80.a)
(980.13, 40)
(99.000, 122.000)
정규식 분석 :
^                    # The string must start this way (there can't be anything before). 
    (\()             # An opening parentheses (escaped with a backslash).
    ([-+]?)          # An optional minus, or an optional plus.
    ([\d]{1,2})      # 1 or 2 digits (0-9).
    (                # Start of a sub-pattern.
        (            # Start of a sub-pattern.
            (\.)     # A dot (escaped with a backslash).
            (\d+)    # One or more digits (0-9).
            (,)      # A comma.
        )            # End of a sub-pattern.
    )                # End of a sub-pattern.
    (\s*)            # Zero or more spaces.
    (                # Start of a sub-pattern.
        ([-+]?)      # An optional minus, or an optional plus. 
        ([\d]{1,3})  # 1 to 3 digits (0-9).
        (            # Start of a pattern.
            (\.)     # A dot (escaped with a backslash).
            (\d+)    # One or more digits (0-9).
        )?           # End of an optional pattern.
        (\))         # A closing parenthesis (escaped with a backkslash).
    )                # End of a pattern
$                    # The string must end this way (there can't be anything after).
이제 이것이하지 않는 것은 스스로를이 범위로 제한하는 것입니다.
(-90 to +90, and -180 to +180)
대신 간단하게이 범위로 제한됩니다.
(-99 to +99, -199 to +199) 
그러나 요점은 주로 표현의 각 부분을 분해하는 것입니다.
답변
보다 엄격한 버전은 다음과 같습니다.
^([-+]?\d{1,2}[.]\d+),\s*([-+]?\d{1,3}[.]\d+)$
- 위도 = 
-90–+90 - 경도 = 
-180–+180 


