问题
I have to work with strings which may contain Lat/Long data, like this:
$query = "-33.805789,151.002060";
$query = "-33.805789, 151.002060";
$query = "OVER HERE: -33.805789,151.002060";
For my purposes, the first 2 strings are correct, but the last one isn't. I am trying to figure out a match pattern which would match a lat and long separated by a comma, or a comma and a space. But if it has anything in the string other than numbers, spaces, dots, minus signs and commas, then it should fail the match.
Hope this makes sense, and TIA!
回答1:
^[+-]?\d+\.\d+, ?[+-]?\d+\.\d+$
The ^
at the start and $
at the end make sure that it matches the complete string, and not just a part of it.
回答2:
It's simplest to solve with a regex as suggested in the other answers. Here is a step-by-step approach that would work too:
$result = explode(",", $query); // Split the string by commas
$lat = trim($result[0]); // Clean whitespace
$lon = trim($result[1]); // Clean whitespace
if ((is_numeric($lat)) and (is_numeric($lon))) echo "Valid coordinates!";
This solution will accept arbitrary data after a comma:
"-33.805789,151.002060,ABNSBOFVJDPENVÜE";
will pass as ok.
As Frank Farmer correctly notes, is_numeric
will also recognize scientific notation.
回答3:
/^-*\d*\.\d+,[\b]*-*\d*\.\d+$/
回答4:
The regex approach can't really validate that longitude and latitude are valid, but here's one that would be more precise than the others posted already:
/^\s*-?\d{1,3}\.\d+,\s*\d{1,3}\.\d+\s*$/
This would reject some strings that others' solutions would allow, such as
-1-23-1-,210-
--123.1234,123.1234
But it would still allow invalid values like this:
361.1234, 123.1234
Your best bet -- if you need serious validation -- is to create a class to store and validate these coordinates.
来源:https://stackoverflow.com/questions/2348502/how-to-determine-if-a-php-string-only-contains-latitude-and-longitude