如何确定PHP字符串是否仅包含纬度和经度

时间:2010-02-27 18:49:09

标签: php regex geolocation geocoding

我必须处理可能包含Lat / Long数据的字符串,如下所示:

$query = "-33.805789,151.002060";
$query = "-33.805789, 151.002060";
$query = "OVER HERE: -33.805789,151.002060";

就我的目的而言,前2个字符串是正确的,但最后一个字符串不正确。我试图弄清楚一个匹配模式,匹配一个由逗号或逗号和空格分隔的lat和long。但如果除了数字,空格,圆点,减号和逗号之外,它在字符串中有任何内容,那么它应该会使匹配失败。

希望这是有道理的,还有TIA!

4 个答案:

答案 0 :(得分:10)

^[+-]?\d+\.\d+, ?[+-]?\d+\.\d+$

开头的^和最后的$确保它与完整的字符串匹配,而不仅仅是其中的一部分。

答案 1 :(得分:2)

如其他答案中所建议的那样使用正则表达式进行求解最简单。以下是一个循序渐进的方法:

$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!";

此解决方案将在逗号后接受任意数据:

 "-33.805789,151.002060,ABNSBOFVJDPENVÜE";

将正确传递。

正如Frank Farmer正确指出的那样,is_numeric也会认可科学记谱法。

答案 2 :(得分:0)

/^-*\d*\.\d+,[\b]*-*\d*\.\d+$/

答案 3 :(得分:0)

正则表达式方法无法真正验证经度和纬度是否有效,但这里的方法比已经发布的其他方法更精确:

/^\s*-?\d{1,3}\.\d+,\s*\d{1,3}\.\d+\s*$/

这会拒绝其他人的解决方案允许的一些字符串,例如

-1-23-1-,210-
--123.1234,123.1234

但它仍然会允许这样的无效值:

361.1234, 123.1234

您最好的选择 - 如果您需要认真验证 - 是创建一个类来存储和验证这些坐标。