php验证十进制格式的纬度/经度字符串

标签 php regex

好吧,我有一个庞大的经纬度坐标列表。也就是说,我也有一些来源可以从中提取这些坐标。其中一些来自 get/post 方法,这可能会导致我的站点/服务中存在潜在的安全漏洞。所以我想弄清楚如何通过 PHP 验证经度和纬度。我在想通过 preg_match 的正则表达式。但我可能是错的,也许有人会建议更简单的方法。我已经尝试了我自己的概念,并且尝试了各种互联网 brew 概念,试图找到一个正则表达式模式,通过 preg_match 为我验证这些模式(如果你有更好的建议,我会洗耳恭听)。

在最终屈服并来到这里之前,我最后一次失败的尝试是..

preg_match('^(\-?\d+(\.\d+)?),\s*(\-?\d+(\.\d+)?)$', $geoResults['latitude']))

这会产生“preg_match() [function.preg-match]: No ending delimiter '^' found ” 作为我的错误。我尝试的最后几次尝试产生了该错误,所以我不知道它是什么或意味着什么。

最佳答案

这是一个有点老的问题,但无论如何我在这里发布我的解决方案:

preg_match('/^[-]?(([0-8]?[0-9])\.(\d+))|(90(\.0+)?);[-]?((((1[0-7][0-9])|([0-9]?[0-9]))\.(\d+))|180(\.0+)?)$/', $geoResults['latlng']);

我在这里假设你 split 了纬度。从液化天然气。用分号。如果你只想检查纬度。或者只有lng。这是正则表达式;

纬度的 Rgx:

/^[-]?(([0-8]?[0-9])\.(\d+))|(90(\.0+)?)$/

lng 的 Rgx.:

/^[-]?((((1[0-7][0-9])|([0-9]?[0-9]))\.(\d+))|180(\.0+)?)$/

这是一个改进的在线演示: https://regex101.com/r/bV5fA1/1

关于php验证十进制格式的纬度/经度字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7549669/

相关文章:

php - 数组到字符串转换注意事项。为什么?

php - Free Radius + Captive Portal + MySql 未收到有效的 RADIUS 响应

php - 如何让两个数据库显示在两个单选按钮上,每个按钮选择一个

javascript - 正则表达式对我想做的事情是否正确?

ios - 使用2种模式时遇到正则表达式问题

php - 如何在数据透视表 Laravel 中使用附加字段

php - 从硬编码HTML站点中删除index.php

c# - OR 正则表达式中的表达式?

java - 帮助更好地解析 Java 中字符串中的数字

java - 正则表达式匹配最后一部分的问题