PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集

QQ:420220301 微信/手机:150-3210-7690
当前位置:首页 > 工作总结

php封装的表单验证类完整实例

管理员 2025-03-18
工作总结
67

在 PHP 中,表单验证是确保用户输入数据合法性和安全性的重要步骤。以下是一个完整的表单验证类封装实例,支持常见的验证规则(如必填、邮箱、长度、数字等),并返回详细的错误信息。


1. 表单验证类

示例代码

php
复制
<?phpclass FormValidator {
    private $data;       // 表单数据
    private $rules;      // 验证规则
    private $errors = []; // 错误信息

    /**
     * 设置表单数据
     *
     * @param array $data 表单数据
     */
    public function setData($data) {
        $this->data = $data;
    }

    /**
     * 设置验证规则
     *
     * @param array $rules 验证规则
     */
    public function setRules($rules) {
        $this->rules = $rules;
    }

    /**
     * 执行验证
     *
     * @return bool 验证结果
     */
    public function validate() {
        foreach ($this->rules as $field => $rule) {
            $rules = explode('|', $rule);
            foreach ($rules as $singleRule) {
                $this->applyRule($field, $singleRule);
            }
        }
        return empty($this->errors);
    }

    /**
     * 应用单个验证规则
     *
     * @param string $field 字段名
     * @param string $rule 验证规则
     */
    private function applyRule($field, $rule) {
        $params = [];
        if (strpos($rule, ':') !== false) {
            list($rule, $params) = explode(':', $rule);
            $params = explode(',', $params);
        }

        $value = $this->data[$field] ?? null;

        switch ($rule) {
            case 'required':
                if (empty($value)) {
                    $this->addError($field, "$field 是必填项");
                }
                break;
            case 'email':
                if (!filter_var($value, FILTER_VALIDATE_EMAIL)) {
                    $this->addError($field, "$field 必须是有效的邮箱地址");
                }
                break;
            case 'min':
                if (strlen($value) < $params[0]) {
                    $this->addError($field, "$field 至少需要 {$params[0]} 个字符");
                }
                break;
            case 'max':
                if (strlen($value) > $params[0]) {
                    $this->addError($field, "$field 最多只能有 {$params[0]} 个字符");
                }
                break;
            case 'numeric':
                if (!is_numeric($value)) {
                    $this->addError($field, "$field 必须是数字");
                }
                break;
            case 'in':
                if (!in_array($value, $params)) {
                    $this->addError($field, "$field 必须是以下值之一: " . implode(', ', $params));
                }
                break;
            default:
                throw new Exception("未知的验证规则: $rule");
        }
    }

    /**
     * 添加错误信息
     *
     * @param string $field 字段名
     * @param string $message 错误信息
     */
    private function addError($field, $message) {
        $this->errors[$field][] = $message;
    }

    /**
     * 获取错误信息
     *
     * @return array 错误信息
     */
    public function getErrors() {
        return $this->errors;
    }}// 示例用法$data = [
    'name' => '',
    'email' => 'invalid-email',
    'age' => 'twenty',
    'password' => '123',];$rules = [
    'name' => 'required',
    'email' => 'required|email',
    'age' => 'required|numeric',
    'password' => 'required|min:6|max:20',];$validator = new FormValidator();$validator->setData($data);$validator->setRules($rules);if ($validator->validate()) {
    echo "表单验证通过!";} else {
    echo "表单验证失败,错误信息如下:\n";
    print_r($validator->getErrors());}?>

2. 代码说明

  1. FormValidator 类

    • setData():设置表单数据。

    • setRules():设置验证规则。

    • validate():执行验证,返回验证结果。

    • applyRule():应用单个验证规则。

    • addError():添加错误信息。

    • getErrors():获取错误信息。

  2. 验证规则

    • required:字段必填。

    • email:字段必须是有效的邮箱地址。

    • min:字段的最小长度。

    • max:字段的最大长度。

    • numeric:字段必须是数字。

    • in:字段值必须在指定范围内。

  3. 错误信息

    • 验证失败时,返回详细的错误信息。


3. 使用步骤

  1. 设置表单数据

    • 调用 $validator->setData($data) 设置表单数据。

  2. 设置验证规则

    • 调用 $validator->setRules($rules) 设置验证规则。

  3. 执行验证

    • 调用 $validator->validate() 执行验证。

  4. 获取错误信息

    • 调用 $validator->getErrors() 获取错误信息。


4. 示例输出

如果表单数据不符合验证规则,输出如下:

plaintext
复制
表单验证失败,错误信息如下:
Array
(
    [name] => Array
        (
            [0] => name 是必填项
        )

    [email] => Array
        (
            [0] => email 必须是有效的邮箱地址
        )

    [age] => Array
        (
            [0] => age 必须是数字
        )

    [password] => Array
        (
            [0] => password 至少需要 6 个字符
        )
)

5. 注意事项

  1. 规则扩展

    • 可以根据需求扩展验证规则,如手机号验证、URL 验证等。

  2. 错误信息

    • 错误信息可以根据需求自定义,支持多语言。

  3. 性能优化

    • 对于大量表单数据,建议对验证规则进行优化,避免重复验证。

  4. 安全性

    • 验证表单数据后,应对数据进行进一步处理(如过滤、转义),防止安全漏洞。


6. 总结

功能说明
设置表单数据支持数组形式的表单数据
设置验证规则支持多种验证规则
执行验证返回验证结果
获取错误信息返回详细的错误信息

通过封装表单验证类,可以方便地在 PHP 项目中实现表单验证功能,确保用户输入数据的合法性和安全性。




希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, LeCMS, ClassCMS, Fastadmin, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。

相关推荐

扫码关注

qrcode

QQ交谈

回顶部