我必须处理可能包含Lat / Long数据的字符串,如下所示:
$query = "-33.805789,151.002060";
$query = "-33.805789, 151.002060";
$query = "OVER HERE: -33.805789,151.002060";
就我的目的而言,前2个字符串是正确的,但最后一个字符串不正确。我试图弄清楚一个匹配模式,匹配一个由逗号或逗号和空格分隔的lat和long。但如果除了数字,空格,圆点,减号和逗号之外,它在字符串中有任何内容,那么它应该会使匹配失败。
希望这是有道理的,还有TIA!
答案 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
您最好的选择 - 如果您需要认真验证 - 是创建一个类来存储和验证这些坐标。