7

我目前正在编写一些 PHP 表单验证(我已经验证了客户端)并且有一些重复的代码,我认为这些代码可以很好地用于一个不错的 PHP 小函数。但是我无法让它工作。我确定这只是语法问题,但我无法确定。

任何帮助表示赞赏。

//Validate phone number field to ensure 8 digits, no spaces.
if(0 === preg_match("/^[0-9]{8}$/",$_POST['Phone']) {
    $errors['Phone'] = "Incorrect format for 'Phone'";
}

if(!$errors) {
    //Do some stuff here....
}

我发现我写了很多验证代码,我可以通过创建一个函数来节省一些时间和一些代码行。

//Validate Function
function validate($regex,$index,$message) {
    if(0 === preg_match($regex,$_POST[$index])) {
        $errors[$index] = $message;
    }

并这样称呼它......

validate("/^[0-9]{8}$/","Phone","Incorrect format for Phone");

谁能明白为什么这行不通?

请注意,我在处理此问题以尝试触发错误时禁用了客户端验证,因此我为“电话”发送的值无效。

4

3 回答 3

4

让我们尝试一些更深思熟虑的东西。

你想像这样使用它:

if (validate(...)) {
    // It's ok
}

然后我建议这个:

function validate($regex, $index, $message, &$errors) {     
    if (isset($_POST[$index]) && 1 === preg_match($regex, $_POST[$index])) {
        return true;            
    }
    $errors[$index] = $message; 
    return false;        
}

现在您有机会在错误时退出验证,或者您可以通过这些传递 $errors 并用验证错误填充它。没有使用全局变量。

于 2012-12-19T05:29:21.310 回答
1

这是一个修复:

//Validate Function
function validate($regex,$index,$message) {
    global $errors;
    if(0 === preg_match($regex,$_POST[$index])) {
        $errors[$index] = $message;
    }
}

这是问题:

if(0 === preg_match($regex,$_POST[$index],$message)

$message,一个字符串,是一个匹配数组应该去的地方。你不需要它。

从手册: int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )

http://php.net/manual/en/function.preg-match.php

于 2012-12-19T05:11:58.623 回答
0

您在验证函数的 if 处缺少右括号 更改此

if(0 === preg_match($regex,$_POST[$index],$message)

对此

if(0 === preg_match($regex,$_POST[$index],$message))
于 2012-12-19T05:30:54.750 回答