-
-
Save arubacao/b5683b1dab4e4a47ee18fd55d9efbdd1 to your computer and use it in GitHub Desktop.
<?php | |
/** | |
* Validates a given latitude $lat | |
* | |
* @param float|int|string $lat Latitude | |
* @return bool `true` if $lat is valid, `false` if not | |
*/ | |
function validateLatitude($lat) { | |
return preg_match('/^(\+|-)?(?:90(?:(?:\.0{1,6})?)|(?:[0-9]|[1-8][0-9])(?:(?:\.[0-9]{1,6})?))$/', $lat); | |
} | |
/** | |
* Validates a given longitude $long | |
* | |
* @param float|int|string $long Longitude | |
* @return bool `true` if $long is valid, `false` if not | |
*/ | |
function validateLongitude($long) { | |
return preg_match('/^(\+|-)?(?:180(?:(?:\.0{1,6})?)|(?:[0-9]|[1-9][0-9]|1[0-7][0-9])(?:(?:\.[0-9]{1,6})?))$/', $long); | |
} | |
/** | |
* Validates a given coordinate | |
* | |
* @param float|int|string $lat Latitude | |
* @param float|int|string $long Longitude | |
* @return bool `true` if the coordinate is valid, `false` if not | |
*/ | |
function validateLatLong($lat, $long) { | |
return preg_match('/^[-]?(([0-8]?[0-9])\.(\d+))|(90(\.0+)?),[-]?((((1[0-7][0-9])|([0-9]?[0-9]))\.(\d+))|180(\.0+)?)$/', $lat.','.$long); | |
} | |
$tests = [ | |
'lat' => [ | |
'0.0','+90.0','-90.0','90.0','+45','-45','45','50','55.55','45,1','A',], | |
'long' => [ | |
'0.0', '180', '-180', '+180', '179.9', 'A', | |
], | |
'lat_long' => [ | |
'90.0,180.0', | |
'47.1,179.1', | |
'90.1a,180.1a' | |
] | |
]; | |
echo "\033[37;44m:::::::::::: Tests ::::::::::::\033[0m".PHP_EOL; | |
echo "\033[1mType:\t\tValue:\tResult\033[0m".PHP_EOL; | |
foreach ($tests['lat'] as $lat) { | |
echo "Latitude:\t$lat\t\t".((validateLatitude($lat)) ? "\033[32mMATCH\033[0m" : "\033[31mFAIL\033[0m").PHP_EOL; | |
} | |
foreach ($tests['long'] as $long) { | |
echo "Longitude:\t$long\t\t".((validateLongitude($long)) ? "\033[32mMATCH\033[0m" : "\033[31mFAIL\033[0m").PHP_EOL; | |
} | |
foreach ($tests['lat_long'] as $lat_long) { | |
$geo = explode(",", $lat_long); | |
echo "Lat,Long:\t$lat_long\t".((validateLatLong($geo[0],$geo[1])) ? "\033[32mMATCH\033[0m" : "\033[31mFAIL\033[0m").PHP_EOL; | |
} |
/**
* Validates a given coordinate
*
* @param float|int|string $lat Latitude
* @param float|int|string $long Longitude
* @return bool `true` if the coordinate is valid, `false` if not
*/
function is_coordinate($lat, $long) {
$lat_pattern = '/\A[+-]?(?:90(?:\.0{1,18})?|\d(?(?<=9)|\d?)\.\d{1,18})\z/x';
$long_pattern = '/\A[+-]?(?:180(?:\.0{1,18})?|(?:1[0-7]\d|\d{1,2})\.\d{1,18})\z/x';
if (preg_match($lat_pattern, $lat) && preg_match($long_pattern, $long)) {
return true;
} else {
return false;
}
}
/* These are two points in Turkey */
$point1 = array('lat' => 41.008610, 'long' => 28.971111); // Istanbul
$point2 = array('lat' => 39.925018, 'long' => 32.836956); // Anitkabir
echo '<br>';
if(!is_coordinate($point1['lat'], $point1['long'])){
echo 'Invalid coordinate.';
} else {
echo 'The current coordinate.';
}
echo '<br>';
if(!is_coordinate($point2['lat'], $point2['long'])){
echo 'Invalid coordinate.';
} else {
echo 'The current coordinate.';
}
I don't think this we work for wgs84 projection? like 384943.343,344343.004 if yes please suggest anyone perfect. thanks
I use this regex and it works correct:
latitude:
'regex:/^[-]?(([0-8]?[0-9])\.(\d+))|(90(\.0+)?)$/'
longitude:
'regex:/^[-]?((((1[0-7][0-9])|([0-9]?[0-9]))\.(\d+))|180(\.0+)?)$/'
Northings and eastings from Nigeria can use this 'regex:/^\d{1,6}(.\d{1,3})?$/'
I use this regex and it works correct:
latitude:
'regex:/^[-]?(([0-8]?[0-9])\.(\d+))|(90(\.0+)?)$/'
longitude:
'regex:/^[-]?((((1[0-7][0-9])|([0-9]?[0-9]))\.(\d+))|180(\.0+)?)$/'
i will try this on lat an long thanks
echo preg_match('/^[-]?(([0-8]?[0-9]).(\d+))|(90(.0+)?),[-]?((((1[0-7][0-9])|([0-9]?[0-9])).(\d+))|180(.0+)?)$/', '41.883551-82.702518');
I removed the comma and it still returns 1, is there a way to have it so it fails if no comma?
echo preg_match('/^[-]?(([0-8]?[0-9]).(\d+))|(90(.0+)?),[-]?((((1[0-7][0-9])|([0-9]?[0-9])).(\d+))|180(.0+)?)$/', '41.883551-82.702518');
I removed the comma and it still returns 1, is there a way to have it so it fails if no comma?
Maybe you should try and elaborate on what the problem is .
but it is not valid in the case of "--",
I used this regex but it accepted"--78798989898" case which is wrong, Can anyone suggest me something?
but it is not valid in the case of "--", I used this regex but it accepted"--78798989898" case which is wrong, Can anyone suggest me something?
can you tell me the format of the result you want to obtain?
@kuz1toro that allows invalid coordinates such as 104,207