PHP表单验证功能

时间:2012-12-19 05:02:03

标签: php regex validation function

我目前正在编写一些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");

谁能明白为什么这不起作用?

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

3 个答案:

答案 0 :(得分: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;        
}

现在您有机会在错误时转出验证,或者您可以链接这些传递$错误并填写验证错误。没有使用全局变量。

答案 1 :(得分: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

答案 2 :(得分:0)

您缺少验证函数if的右括号 改变这个

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

到此

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