-
-
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; | |
} |
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?
Northings and eastings from Nigeria can use this 'regex:/^\d{1,6}(.\d{1,3})?$/'