1. ホーム
  2. Web プログラミング
  3. 正規表現

緯度経度操作の正当性を示すJava正規表現

2022-01-17 13:34:37

緯度経度適法性のためのJava正規表現

経度 -180.0〜+180.0(整数部は0〜180、小数点以下1〜5位を入力する必要があります。)

正規表現です。

/^[\-\+]? (0?\d{1,2}. \d{1,5}|1[0-7]? \d{1}. \d{1,5}|180.0{1,5})$.

緯度 -90.0 ~ +90.0 (整数部は0~90、小数点以下1~5位を入力すること)

正規表現です。

/^[\-\+]? ([0-8]? \d{1}. \d{1,5}|90.0{1,5})$.

フロントエンドがリストコレクションを渡し、バックエンドが各オブジェクトの緯度経度が合法かどうかをチェックし、合法なものには0、違法なものには2をつけ、フロントエンドがバックエンドから渡されたjsonデータを取得してレンダリングする、こんな要件に遭遇しました。

コードは以下の通りです。

package com.test;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.util.regex.Pattern;
/**
 * @author riemann
 * @date 2020/01/03 21:45
 *public class VerifyLongAndLat {
    private static final String LONGITUDE = "/^[\\-\\\+]? (0?\\d{1,2}\\\. \\d{1,5}|1[0-7]? \\d{1}\\\. \\d{1,5}|180\\.0{1,5})$/";
    private static final String LATITUDE = "/^[\\-\\\+]? (0?\\d{1,2}\\\. \\d{1,5}|1[0-7]? \\d{1}\\\. \\d{1,5}|180\\.0{1,5})$/";
    private JSONArray verifyLongAndLat(List<LocatorDataDetail> ldDetailList, JSONArray errorTypeArray) {
        for (LocatorDataDetail dataDetail : ldDetailList) {
            JSONObject errorTypeObject = new JSONObject();
            Double longitude = dataDetail.getLongitude();
            Double latitude = dataDetail.getLatitude();
            boolean longPattern = Pattern.matches(LONGITUDE, longitude.toString());
            boolean latPattern = Pattern.matches(LATITUDE, latitude.toString());
            if (longPattern || latPattern) {
                errorTypeObject.put("coordinate","0");
            } else {
                errorTypeObject.put("coordinate","2");
            }
            errorTypeArray.add(errorTypeObject);
        }
        return errorTypeArray;
    }
}

ジャワ緯度・経度規則性

6進法緯度・経度正規一致

1.純粋にいくつかのレコードを投影する

2. 一致する経度を適用する(-180.000000から180.000000)。

2. 該当する一致する緯度 (-90.000000 から 90.000000)

/    public static final String LNG_PATTERN = "^[\\\-\\\+]? (0(\\. \\d{1,6})? |([1-9](\\d)?) (\\. \\d{1,6})? |1[0-7]\\d{1}(\\. \\d{1,6})? |180(\\.0{1,6})?) $";
// Latitude
    public static final String LAT_PATTERN = "^[\\-\\\+]? ((0|([1-8]\\d?))(\\. \\d{1,6})? |90(\\.0{1,6})?) $";
    public static void main(String[] args) {
        Pattern p = Pattern.compile(LNG_PATTERN);
        System.out.println(p.matcher("181").matches());
        System.out.println(p.matcher("180.001").matches());
        System.out.println(p.matcher("180.0000").matches());
    }

上記は私の個人的な経験ですが、参考にしていただき、BinaryDevelopをもっと応援していただければと思います。