緯度経度座標にマッチする正規表現?

緯度経度座標にマッチする正規表現を作ろうとしています。緯度経度座標をマッチングする正規表現を作ろうとしているのですが、緯度経度座標をマッチングする正規表現を作ろうとしているのですが、緯度経度座標をマッチングする正規表現を作ろうとしているのですが、緯度経度座標をマッチングする正規表現を作ろうとしています:

^(\-?\d+(\.\d+)?),\w*(\-?\d+(\.\d+)?)$

私はこれがダブル、カンマ、おそらくスペース、そしてもう一つのダブルにマッチすると期待したのですが、うまくいかないようです。具体的には、スペースがない場合のみ動作し、1つ以上では動作しません。何を間違えたのでしょうか?

これは、正しい範囲内にある ⁇ 度と経度の値に厳密に一致します。

^[-+]?([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。

解説 (6)
ソリューション

空白は "we "ではなく "we "です。

^(\-?\d+(\.\d+)?),\s*(\-?\d+(\.\d+)?)$

これが機能するかどうかを確認する

解説 (3)

私はこれらのものを使用しています(小数形式、小数点以下6桁):

⁇ 度。 --------。

^(\+|-)?(?:90(?:(?:\.0{1,6})?)|(?:[0-9]|[1-8][0-9])(?:(?:\.[0-9]{1,6})?))$

[。![ ⁇ 度正規表現の視覚化][1]][1]。

経度。 ---------。

^(\+|-)?(?:180(?:(?:\.0{1,6})?)|(?:[0-9]|[1-9][0-9]|1[0-7][0-9])(?:(?:\.[0-9]{1,6})?))$

[。![経度正規表現の視覚化][2]][2]。

----------。 [ここ][3]は、アクセスを容易にするために、ここでも報告されている両方をテストする要点です。 これは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 = -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 
解説 (10)

実際、正規表現を超えるアリックスアクセルは、 ⁇ 度、経度の範囲の視点で間違っています。

⁇ 度測定の範囲は–90&#176です。 + 90°まで 経度測定の範囲は–180&#176です。 +180°まで

したがって、以下に示す正規表現はより正確に検証されます。 また、私の考えによれば、 ⁇ 度/経度の小数点を制限するべきではありません。

^([-+]?\d{1,2}([.]\d+)?),\s*([-+]?\d{1,3}([.]\d+)?)$

または目的Cの場合。

^([-+]?\\d{1,2}([.]\\d+)?),\\s*([-+]?\\d{1,3}([.]\\d+)?)$
解説 (1)
^-?[0-9]{1,3}(?:\.[0-9]{1,10})?$

正規表現の内訳:

^-?[0-9]{1,3}(?:\.[0-9]{1,10})?$

-?#負の値を受け入れます。

^#文字列の開始。

[0-9] {1,3}#1〜3桁に一致(i。 e。 0-999)。

(?:#一致するようにしてください。..

\。#小数点。

[0-9] {1,10}#の後に1〜10桁が続きます(i。 e。 0-99999999999)。

)? #。 ..オプションで。

$#文字列の終わり。

解説 (1)

これを試して:

^(\()([-+]?)([\d]{1,2})(((\.)(\d+)(,)))(\s*)(([-+]?)([\d]{1,3})((\.)(\d+))?(\)))$

チェックしてください:

http://regexpal.com/

上のボックスに式を貼り付け、次にこのようなものを下のボックスに入れます。

(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) 

しかし、要点は主に表現の各部分を分析することです。

解説 (0)

より厳密なバージョンは次のとおりです。

^([-+]?\d{1,2}[.]\d+),\s*([-+]?\d{1,3}[.]\d+)$
  • ⁇ 度= -90-+ 90。 -経度= -180-+ 180
解説 (2)

Python:

⁇ 度: result = re.match( "^ [+-]?((90 \?0 * $)|(([0-8]?[0-9])\?[0-9] * $)) "、' -90.00001 ')

経度: result = re.match( "^ [+-]?((180 \?0 * $)|((((1 [0-7] [0-9])|([0-9] {0,2}))\?[0-9] * $)) "、' -0.0000 ')

この例では ⁇ 度は失敗するはずです。

解説 (0)

本来は空白を使うべきところ、"単語文字 "を使っているのではないでしょうか。 単語文字は通常[A-Za-z0-9_]で構成されているので、空白は除外され、さらにオプションのマイナス記号や数字ではマッチしません。

解説 (0)

これは次のようなフォーマットで機能する:31 ͦ 37.4' E

^[-]?\d{1,2}[ ]*ͦ[ ]*\d{1,2}\.?\d{1,2}[ ]*\x27[ ]*\w$
解説 (0)

@ macro-ferrari私はそれを短縮する方法を見つけました、そしてregexエンジンについての最近のすべての話に照らして先を見通すことなく。

const LAT_RE = /^[+-]?(([1-8]?[0-9])(\.[0-9]{1,6})?|90(\.0{1,6})?)$/;

。![ここに画像の説明を入力してください](https://i.stack.imgur.com/Qs1z2.png。)

const LONG_RE = /^[+-]?((([1-9]?[0-9]|1[0-7][0-9])(\.[0-9]{1,6})?)|180(\.0{1,6})?)$/;

。![ここに画像の説明を入力してください](https://i.stack.imgur.com/vAMqV.png。)

解説 (2)

ルビー

経度 -179.99999999。.180

/^(-?(?:1[0-7]|[1-9])?\d(?:\.\d{1,8})?|180(?:\.0{1,8})?)$/ === longitude.to_s

⁇ 度 -89.99999999。.90

/^(-?[1-8]?\d(?:\.\d{1,8})?|90(?:\.0{1,8})?)$/ === latitude.to_s
解説 (0)

⁇ 度と経度の正しいパターンをチェックするための目的Cの完全で単純な方法は次のとおりです。

 -( BOOL )textIsValidValue:(NSString*) searchedString
{
    NSRange   searchedRange = NSMakeRange(0, [searchedString length]);
    NSError  *error = nil;
    NSString *pattern = @"^[-+]?([1-8]?\\d(\\.\\d+)?|90(\\.0+)?),\\s*[-+]?(180(\\.0+)?|((1[0-7]\\d)|([1-9]?\\d))(\\.\\d+)?)$";
    NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern: pattern options:0 error:&error];
    NSTextCheckingResult *match = [regex firstMatchInString:searchedString options:0 range: searchedRange];
    return match ? YES : NO;
}

ここで、 searchedString は、ユーザーがそれぞれのテキストフィールドに入力する入力です。

解説 (0)

PHP。

PHPのバージョンは次のとおりです(入力値は「$ latitude」と「$ longitude」です)。


$latitude_pattern  = '/\A[+-]?(?:90(?:\.0{1,18})?|\d(?(?
解説 (0)

あなたはこれを試すことができます:

var latExp = /^(?=.)-?((8[0-5]?)|([0-7]?[0-9]))?(?:\.[0-9]{1,20})?$/;
var lngExp = /^(?=.)-?((0?[8-9][0-9])|180|([0-1]?[0-7]?[0-9]))?(?:\.[0-9]{1,20})?$/;
解説 (0)

これを試して:

^[-+]?(([0-8]\\d|\\d)(\\.\\d+)?|90(\\.0+)?)$,\s*^[-+]?((1[0-7]\\d(\\.\\d+)?)|(180(\\.0+)?)|(\\d\\d(\\.\\d+)?)|(\\d(\\.\\d+)?))$
解説 (0)

これを試して:


(?
解説 (2)
/(-?\d{1,2}[.]\d+)(?U:.*)(-?1?[0-8]?\d[.]\d+)/
解説 (0)