codeigniter表单验证核心是服务端form_validation类,需设规则、执行run()并配合input类安全取值;规则如trim|required、min_length[6]、valid_email、matches[password]、is_unique[users.email]等,成功后须哈希密码、标准化敏感字段。

CodeIgniter 的表单验证核心在于 form_validation 类,它不依赖前端 JS,而是通过服务端规则保障数据合法性与安全性。验证和后续数据处理需配合使用,不能只校验不清理、不转义。
设置字段验证规则
在控制器中调用 set_rules() 为每个字段定义规则,格式统一为:字段名、显示别名、规则链。规则之间用竖线分隔,顺序影响逻辑(如 trim|required 比 required|trim 更稳妥)。
-
required:非空判断(仅检查是否提交且不为空字符串) -
trim:自动去除首尾空格,建议放在required前避免误判 -
min_length[6]/max_length[20]:按字符数限制,对中文也生效 -
valid_email:基础邮箱格式校验(不发验证邮件) -
matches[password]:用于确认密码,确保两字段值完全一致 -
is_unique[users.email]:查数据库表users的email字段是否已存在
执行验证并分流处理
调用 $this->form_validation->run() 启动验证。返回 FALSE 表示失败,此时可直接加载原表单页;返回 TRUE 表示通过,可安全取值并继续业务逻辑。
- 验证失败时,错误信息会自动存入
$this->form_validation->error('字段名')或全部用validation_errors() - 成功后推荐用
$this->input->post('字段名', TRUE)获取数据,第二个参数TRUE会自动过滤 XSS(等效于旧版xss_clean规则) - 不要直接用
$_POST,绕过 CI 输入类会丢失过滤和类型转换能力
常见组合场景示例
注册表单是典型用例,需兼顾必填、格式、唯一性和一致性:
$this->form_validation->set_rules('username', '用户名', 'trim|required|min_length[3]|max_length[16]|alpha_dash');
$this->form_validation->set_rules('email', '邮箱', 'trim|required|valid_email|is_unique[users.email]');
$this->form_validation->set_rules('password', '密码', 'trim|required|min_length[6]');
$this->form_validation->set_rules('passconf', '确认密码', 'trim|required|matches[password]');
-
alpha_dash限制用户名只含字母、数字、下划线和短横线 - 所有字段都加
trim避免用户多敲空格导致唯一性校验误报 -
is_unique在验证阶段就查库,无需额外写模型逻辑
验证后数据处理建议
验证通过只是第一步,真实业务中还需做进一步处理:
- 密码必须哈希再入库:
password_hash($this->input->post('password'), PASSWORD_DEFAULT) - 敏感字段如邮箱、手机号可二次标准化(小写化、去空格)
- 整型字段建议用
intval()或(int)强制转换,避免字符串注入风险 - 若涉及文件上传,验证要单独用
upload类,不能混进 form_validation 规则











