Last active
October 28, 2023 14:25
-
-
Save ferrarimarco/e73e07d6664281a81d95 to your computer and use it in GitHub Desktop.
Latitude/Longitude regex validation test. You need TestNG, Hamcrest and Lombok to run it.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi,
I'm new to regex, I could not quite understand the difference between above two
At one place it is 0{1,6} and at another place it is [0-9]{1,6}
Could you please elaborate on this
Actually I have a longitude value -83.37745046615599
where the number of decimal places is greater than 6, as per my understanding it is limited to 6, I tried [0-9]{1,15} it did not work