kzen.dev
  • Întrebări
  • Tag-uri
  • Utilizatori
Notificări
Recompense
Înregistrare
După înregistrare, veți primi notificări despre răspunsurile și comentariile la întrebările DVS.
Logare
Dacă aveţi deja un cont, autentificaţi-vă pentru a verifica notificările noi.
Aici vor fi recompensele pentru întrebările, răspunsurile și comentariile adăugate sau modificate.
Mai mult
Sursă
Editează
Jake Petroules
Jake Petroules
Question

Expresie regulată pentru potrivire latitudine/longitudine?

Am'm încercarea de a crea o expresie regulată pentru potrivire latitudine/longitudine. Pentru indeplinesc un dublu-precizie numărul I'am folosit (\-?\d+(\.\d+)?), și a încercat să combine într-o singură expresie:

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

Am așteptat acest lucru pentru a se potrivi un pat dublu, o virgulă, poate puțin spațiu, și un alt dublu, dar nu't par să funcționeze. În mod special aceasta funcționează numai dacă nu's NICI un spațiu, nu una sau mai multe. Ce am făcut greșit?

128 2010-08-19T03:26:18+00:00 18
Programare
regex
Iain Fraser
Iain Fraser
9 septembrie 2013 в 12:57
2013-09-09T00:57:16+00:00
Mai mult
Sursă
Editează
#10907550

Acesta va corespunde strict latitudine și longitudine valori care se încadrează în intervalul corect:

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

Meciuri

  • +90.0, -127.554334
  • 45, 180
  • -90, -180
  • -90.000, -180.0000
  • +90, +180
  • 47.1231231, 179.99999999

Nu't de Meci

  • -90., -180.
  • +90.1, -100.111
  • -91, 123.456
  • 045, 180
192
0
Solution / Answer
Eric C
Eric C
19 august 2010 в 3:38
2010-08-19T03:38:49+00:00
Mai mult
Sursă
Editează
#10907545

Spațiu este \s, nu \w

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

Să vedem dacă merge

110
0
Marco Ferrari
Marco Ferrari
14 iulie 2015 в 1:36
2015-07-14T13:36:44+00:00
Mai mult
Sursă
Editează
#10907558

Eu sunt, folosind acestea (format zecimal, cu 6 cifre zecimale):

Latitudine

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

Latitudine expresie Regulată vizualizare

Longitudine

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

Longitudine expresie Regulată vizualizare


Aici este o esență care testează atât, raportat aici, de asemenea, pentru a facilita accesul. L's un Java TestNG test. Ai nevoie de Slf4j, Hamcrest și Lombok să-l rulați:

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;
        }
    }
}
Marco Ferrari
Marco Ferrari
Răspuns editat 6 aprilie 2017 в 6:40
94
0
 Sampada
Sampada
4 ianuarie 2013 в 10:51
2013-01-04T10:51:57+00:00
Mai mult
Sursă
Editează
#10907548

De fapt Alix Axel, mai presus de regex este greșit în latitudine, longitudine variază punct de vedere.

Latitudine măsurători variază de la -90° pana la +90° Longitudine măsurători variază de la -180° la +180°

Deci regex dat mai jos validează cu mai multă precizie. De asemenea, ca pe gândul meu nimeni nu ar trebui să limiteze punctul zecimal în latitudine/longitudine.

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

SAU pentru Obiectiv C

^([-+]?\\d{1,2}([.]\\d+)?),\\s*([-+]?\\d{1,3}([.]\\d+)?)$
19
0
Zehra Nasif
Zehra Nasif
15 mai 2014 в 8:00
2014-05-15T20:00:56+00:00
Mai mult
Sursă
Editează
#10907553
^-?[0-9]{1,3}(?:\.[0-9]{1,10})?$

Regex defalcare:

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

-? # accepta valori negative

^ # Începe de string

[0-9]{1,3} # Meci 1-3 cifre (am. e. 0-999)

(?: # Încercați să se potrivească...

\. # un punct zecimal

[0-9]{1,10} # urmat de unul la 10 cifre (am. e. 0-9999999999)

)? # opțional ...

$ # Sfârșitul șirului

Jonatas Walker
Jonatas Walker
Răspuns editat 27 noiembrie 2015 в 2:08
11
0
 user1439929
user1439929
30 august 2013 в 3:20
2013-08-30T03:20:24+00:00
Mai mult
Sursă
Editează
#10907549

Încercați acest lucru:

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

Verifica la:

http://regexpal.com/

Inserați o expresie în caseta de sus, apoi pune astfel de lucruri în caseta de jos:

(80.0123, -34.034)
(80.0123)
(80.a)
(980.13, 40)
(99.000, 122.000)

Regex defalcare:

^                    # 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).

Acum, ceea ce NU face este să se limiteze la acest interval:

(-90 to +90, and -180 to +180)

În schimb, acesta simplu se limitează la aceasta gama:

(-99 to +99, -199 to +199) 

Dar ideea este, în principal, doar pentru a rupe în jos fiecare bucată de exprimare.

8
0
Alix Axel
Alix Axel
29 noiembrie 2012 в 4:52
2012-11-29T16:52:07+00:00
Mai mult
Sursă
Editează
#10907547

Aici este o mai strictă versiune:

^([-+]?\d{1,2}[.]\d+),\s*([-+]?\d{1,3}[.]\d+)$
  • Latitudine = -90 -- +90
  • Longitudine = -180 -- +180
7
0
picmate 涅
picmate 涅
24 aprilie 2015 в 12:14
2015-04-24T12:14:45+00:00
Mai mult
Sursă
Editează
#10907556

Python:

Latitudine: rezultat = re.meci("^[+-]?((90.?0$)|(([0-8]?[0-9]).?[0-9]$))", '-90.00001')`

Longitudine: rezultat = re.meci("^[+-]?((180.?0$)|(((1[0-7][0-9])|([0-9]{0,2})).?[0-9]$))", '-0.0000')`

Latitudine ar trebui să eșueze în exemplu.

5
0
 theraccoonbear
theraccoonbear
19 august 2010 в 3:31
2010-08-19T03:31:23+00:00
Mai mult
Sursă
Editează
#10907544

Te cred're folosind \w (word caracter) în cazul în care ar trebui să fie folosind \s (spațiu). Cuvântul caractere constau de obicei de [A-Za-z0-9_], astfel încât exclude spațiu, care apoi în continuare nu reușește să se potrivi pe opțională semnul minus sau o cifră.

3
0
 msaleh
msaleh
16 iunie 2011 в 12:46
2011-06-16T12:46:23+00:00
Mai mult
Sursă
Editează
#10907546

Acest lucru ar lucra pentru format astfel: 31 37.4' E

^[-]?\d{1,2}[ ]*ͦ[ ]*\d{1,2}\.?\d{1,2}[ ]*\x27[ ]*\w$
 kenorb
kenorb
Răspuns editat 1 noiembrie 2019 в 8:33
3
0
Arun Karunagath
Arun Karunagath
2 mai 2018 в 11:07
2018-05-02T11:07:23+00:00
Mai mult
Sursă
Editează
#10907560

@macro-ferrari am găsit o cale să-l scurteze, și fără a uita-te aheads în lumina recentelor discuții despre regex motoarele

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

introduceți descrierea imaginii aici

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

introduceți descrierea imaginii aici

3
0
Zoran Kikic
Zoran Kikic
29 ianuarie 2015 в 4:40
2015-01-29T16:40:04+00:00
Mai mult
Sursă
Editează
#10907555

Rubin

Longitudine -179.99999999..180

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

Latitudine -89.99999999..90

/^(-?[1-8]?\d(?:\.\d{1,8})?|90(?:\.0{1,8})?)$/ === latitude.to_s
1
0
 saxenarishav
saxenarishav
13 martie 2019 в 7:50
2019-03-13T07:50:15+00:00
Mai mult
Sursă
Editează
#10907561

O completă și simplă metodă obiectivă de C pentru verificarea model corect pentru latitudine și longitudine este:

 -( 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;
}

unde searchedString este o intrare care utilizator ar putea intra în respectivul text.

0
0
 kenorb
kenorb
22 martie 2019 в 8:25
2019-03-22T20:25:49+00:00
Mai mult
Sursă
Editează
#10907562

PHP

Aici este PHP's version (valorile de intrare sunt: $latitude " și " $longitudine):

$latitude_pattern  = '/\A[+-]?(?:90(?:\.0{1,18})?|\d(?(?<=9)|\d?)\.\d{1,18})\z/x';
$longitude_pattern = '/\A[+-]?(?:180(?:\.0{1,18})?|(?:1[0-7]\d|\d{1,2})\.\d{1,18})\z/x';
if (preg_match($latitude_pattern, $latitude) && preg_match($longitude_pattern, $longitude)) {
  // Valid coordinates.
}
0
0
Sagar  Mal Shankhala
Sagar Mal Shankhala
11 august 2016 в 12:35
2016-08-11T12:35:37+00:00
Mai mult
Sursă
Editează
#10907559

Puteți încerca acest lucru:

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})?$/;
 Giordano
Giordano
Răspuns editat 19 decembrie 2016 в 8:57
-1
0
 jeremyvillalobos
jeremyvillalobos
24 septembrie 2013 в 1:51
2013-09-24T01:51:19+00:00
Mai mult
Sursă
Editează
#10907551

Încercați acest lucru:

^[-+]?(([0-8]\\d|\\d)(\\.\\d+)?|90(\\.0+)?)$,\s*^[-+]?((1[0-7]\\d(\\.\\d+)?)|(180(\\.0+)?)|(\\d\\d(\\.\\d+)?)|(\\d(\\.\\d+)?))$
 Giordano
Giordano
Răspuns editat 19 decembrie 2016 в 9:00
-2
0
 user4325241
user4325241
4 decembrie 2014 в 4:12
2014-12-04T16:12:45+00:00
Mai mult
Sursă
Editează
#10907554

Încercați acest lucru:

(?<!\d)([-+]?(?:[1-8]?\d(?:\.\d+)?|90(?:\.0+)?)),\s*([-+]?(?:180(?:\.0+)?|(?:(?:1[0-7]\d)|(?:[1-9]?\d))(?:\.\d+)?))(?!\d)`
 Giordano
Giordano
Răspuns editat 19 decembrie 2016 в 9:26
-2
0
 Gonzalo
Gonzalo
1 aprilie 2014 в 10:37
2014-04-01T22:37:21+00:00
Mai mult
Sursă
Editează
#10907552
/(-?\d{1,2}[.]\d+)(?U:.*)(-?1?[0-8]?\d[.]\d+)/
-3
0
Adăugati o întrebare
Categorii
Toate
Tehnologii
Cultură
Viață / Artă
Stiință
Profesii
Afaceri
Utilizatori
Toate
Nou
Populare
1
Daniel Gogov
Înregistrat 6 zile în urmă
2
工藤 芳則
Înregistrat 1 săptămână în urmă
3
Ирина Беляева
Înregistrat 2 săptămâni în urmă
4
Darya Arsenyeva
Înregistrat 2 săptămâni în urmă
5
anyta nuam-nuam (LapuSiK)
Înregistrat 2 săptămâni în urmă
ID
JA
KO
RO
RU
© kzen.dev 2023
Sursă
stackoverflow.com
în cadrul licenței cc by-sa 3.0 cu atribuire