首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >php验证十进制格式的纬度/经度字符串

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

Stack Overflow用户
提问于 2011-09-26 08:47:04
回答 7查看 25.1K关注 0票数 26

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

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

代码语言:javascript
复制
preg_match('^(\-?\d+(\.\d+)?),\s*(\-?\d+(\.\d+)?)$', $geoResults['latitude']))

这将产生“preg_match() function.preg-match:找不到结尾分隔符'^‘”作为我的错误。我尝试过的最后几次尝试都产生了这个错误,所以我不知道它是什么或者是什么意思。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-09-26 08:51:05

在匹配序列的开头和结尾添加正斜杠,以使其有效的正则表达式语法:

代码语言:javascript
复制
preg_match('/^(\-?\d+(\.\d+)?),\s*(\-?\d+(\.\d+)?)$/', $geoResults['latitude']);

对于您是否使用正则表达式(正则表达式)的问题,在这种情况下,使用正则表达式(PCRE preg_match())是保护站点的最佳方法。当匹配可变的复杂字符串排列时,regex是最佳选择。开发人员通常会求助于正则表达式来匹配静态字符串,例如“abc”。此时,strpos()str_replace()是更好的选择。

票数 24
EN

Stack Overflow用户

发布于 2014-02-25 15:18:09

这是一个有点老的问题,但不管怎样,我在这里发布了我的解决方案:

代码语言:javascript
复制
preg_match('/^[-]?(([0-8]?[0-9])\.(\d+))|(90(\.0+)?);[-]?((((1[0-7][0-9])|([0-9]?[0-9]))\.(\d+))|180(\.0+)?)$/', $geoResults['latlng']);

我在这里假设你们后来分开了。来自lng。用分号。如果您只想稍后进行检查。或者只有lng。下面是regexp;

Rgx用于以后。:

代码语言:javascript
复制
/^[-]?(([0-8]?[0-9])\.(\d+))|(90(\.0+)?)$/

用于lng的Rgx:

代码语言:javascript
复制
/^[-]?((((1[0-7][0-9])|([0-9]?[0-9]))\.(\d+))|180(\.0+)?)$/

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

票数 33
EN

Stack Overflow用户

发布于 2016-07-19 18:52:11

为什么不使用现代的、经过单元测试的Assertion库呢?

示例Value Object类:

代码语言:javascript
复制
<?php
namespace MyApp\ValueObject;

use Assert\Assertion;

class Location
{
    private $lat;
    private $lon;

    public function __construct($lat, $lon)
    {
        Assertion::greaterOrEqualThan($lat, -90.0);
        Assertion::lessOrEqualThan($lat, 90.0);
        Assertion::greaterOrEqualThan($lon, -180.0);
        Assertion::lessOrEqualThan($lon, 180.0);

        $this->lat = $lat;
        $this->lon = $lon;
    }

    public function latitude()
    {
        return $this->lat;
    }

    public function longitude()
    {
        return $this->lon;
    }

    public function __toString()
    {
        return $this->lat . ' ' . $this->lon;
    }

用法:

代码语言:javascript
复制
$location = new \MyApp\ValueObject\Location(24.7, -20.4059);

echo $location->latitude() , ' ' , $location->longitude();

// or simply

echo $location;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7549669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档