在php

时间:2015-07-16 09:25:35

标签: php validation

我正在尝试使用函数验证纬度和经度。

这是我正在使用的功能:

// Function to validate latitude
function isValidLatitude($latitude){
    if (preg_match("/^-?([1-8]?[1-9]|[1-9]0)\.{1}\d{1,6}$/", $latitude)) {
            return true;
    } else {
            return false;
    }
}

这就是我所说的:

// Check for the "latitude":    
if (!empty( $_POST['geolat'])) {    
    if (isValidLatitude($_POST['geolat'])) {
        $_SESSION['geolat'] = $_POST['geolat']; 
    } else {
        $error_alert[] = "Find your location correctly";
    }       
} else {
    $error_alert[] = "You didn't find your locaiton on google map";
}   

但它不适合我。它始终是:

$error_alert[] = "Find your location correctly";

我的$_POST数组如下所示:

Array
(
    [rest_location] => Colombo
    [geolat] => 6.929677319820927
    [geolng] => 79.86519121166998
    [submitted] => TRUE
)
1

有人可以告诉我这有什么问题吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

您的帖子价值 -

[geolat] => 6.929677319820927

与您使用的正则表达式不匹配。(小数点后允许1到6位数)

所以你可以改变你的正则表达式 -

^-?([1-8]?[1-9]|[1-9]0)\.{1}\d{1,20}$
                                 ^^ Changed from 6 to 20


将您的geolat值更改为十进制后最多6位数

$_POST['geolat']) = floor($_POST['geolat']) * 1000000)/1000000

答案 1 :(得分:0)

将您的功能更改为以下内容:

function isValidLatitude($latitude){
    if (preg_match("/^-?([1-8]?[1-9]|[1-9]0)\.{1}\d+$/", $latitude)) {
            return true;
    } else {
            return false;
    }
}

即,{1,6}表示只允许1到6个数字+表示允许1或任意数量的数字