php-filter

filter(过滤)和 validate(验证)数据。

为了确保提交的值是整数或浮点数,使用 filter_input() 函数和相应的过滤器。

http://php.net/manual/zh/function.filter-input.php

如果成功,则返回被过滤的数据,如果失败,则返回 false,如果 variable 参数未设置,则返回 NULL。

// 定义表单验证函数
function validate_form() {
    $errors = [];
    $input  = [];
    
    // 过滤整数输入
    $ok = filter_input(INPUT_POST, 'age', FILTER_VALIDATE_INT);
    if(is_null($ok) | ($ok === false)) {
        $errors[] = '请输入有效的年龄';
    }

    // 过滤浮点数
    $ok = filter_input(INPUT_POST, 'price', FILTER_VALIDATE_FLOAT);
    if(is_null($ok) | ($ok === false)) {
        $errors[] = '请输入有效的价格';
    }

    // 过滤空输入(避免空格)
    if(strlen(trim($_POST['name'])) == 0) {
        $errors[] = '姓名为必填项';
    }
    
    // 检查 email
    $input['email'] = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
    if(! $input['email']) {
        $errors[] = '请输入有效的 email';
    }
    
    return [$errors, $input];
}

应用表单验证函数:

if($_SERVER['REQUEST_METHOD'] == 'POST') {
    list($form_errors, $input) = validate_form();
    // 如果表单验证有错误,则显示给用户
    if($form_errors) {
        show_form($form_erros);
    } else {
        // 在 process_form() 中要通过 $input['name'] 获取表单值,而不是 $_POST['name']
        process_form($input);
    }
}