好吧,我有我称之为经度和纬度坐标的大量列表.那说我也有一些来源,我从这里拉出这些坐标.其中一些来自get/post方法,这可能会导致我的网站/服务中出现潜在的安全漏洞.所以我想弄清楚如何通过PHP验证经度和纬度.我正在通过preg_match思考一些正则表达式.但我可能是错的,也许有人想提出一个更简单的方法.我已经尝试了自己的概念,并尝试了各种互联网酿造概念,试图找到一个正则表达式模式,将通过preg_match为我验证这些(或者如果你有更好的建议,我会全部听到相似的情况).
在最后进入并来到这里之前,我最后一次失败的尝试是......
preg_match('^(\-?\d+(\.\d+)?),\s*(\-?\d+(\.\d+)?)$', $geoResults['latitude']))
Run Code Online (Sandbox Code Playgroud)
产生"preg_match()[function.preg-match]:找不到结束分隔符'^'"作为我的错误.我试过的最后几次尝试产生了这个错误,所以我不知道它是什么或意味着什么.
Chr*_*oft 25
将正斜杠添加到匹配序列的开头和结尾,以使其成为有效的正则表达式语法:
preg_match('/^(\-?\d+(\.\d+)?),\s*(\-?\d+(\.\d+)?)$/', $geoResults['latitude']);
Run Code Online (Sandbox Code Playgroud)
对于是否使用正则表达式(正则表达式)的问题,在这种情况下使用正则表达式(PCRE preg_match())是保护站点安全的最佳方法.当匹配变量复杂的字符串排列时,正则表达式是要走的路.开发人员通常会使用正则表达式来匹配静态字符串,例如'abc'.这是何时strpos()或是str_replace()更好的选择.
Dor*_*oro 25
这是一个有点老问题,但无论如何我在这里发布我的解决方案:
preg_match('/^[-]?(([0-8]?[0-9])\.(\d+))|(90(\.0+)?);[-]?((((1[0-7][0-9])|([0-9]?[0-9]))\.(\d+))|180(\.0+)?)$/', $geoResults['latlng']);
Run Code Online (Sandbox Code Playgroud)
我在这里假设你拆分拉特.来自lng.用分号.如果你想只检查lat.或者只是lng.这里是regexp的;
Rgx for lat.:
/^[-]?(([0-8]?[0-9])\.(\d+))|(90(\.0+)?)$/
Run Code Online (Sandbox Code Playgroud)
Rgx for lng.:
/^[-]?((((1[0-7][0-9])|([0-9]?[0-9]))\.(\d+))|180(\.0+)?)$/
Run Code Online (Sandbox Code Playgroud)
这是一个改进的在线演示:https: //regex101.com/r/bV5fA1/1