
在 PHP 中,表单验证是确保用户输入数据合法性和安全性的重要步骤。以下是一个完整的表单验证类封装实例,支持常见的验证规则(如必填、邮箱、长度、数字等),并返回详细的错误信息。
1. 表单验证类
示例代码
<?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. 代码说明
FormValidator类:setData():设置表单数据。setRules():设置验证规则。validate():执行验证,返回验证结果。applyRule():应用单个验证规则。addError():添加错误信息。getErrors():获取错误信息。验证规则:
required:字段必填。email:字段必须是有效的邮箱地址。min:字段的最小长度。max:字段的最大长度。numeric:字段必须是数字。in:字段值必须在指定范围内。错误信息:
验证失败时,返回详细的错误信息。
3. 使用步骤
设置表单数据:
调用
$validator->setData($data)设置表单数据。设置验证规则:
调用
$validator->setRules($rules)设置验证规则。执行验证:
调用
$validator->validate()执行验证。获取错误信息:
调用
$validator->getErrors()获取错误信息。
4. 示例输出
如果表单数据不符合验证规则,输出如下:
表单验证失败,错误信息如下: Array ( [name] => Array ( [0] => name 是必填项 ) [email] => Array ( [0] => email 必须是有效的邮箱地址 ) [age] => Array ( [0] => age 必须是数字 ) [password] => Array ( [0] => password 至少需要 6 个字符 ) )
5. 注意事项
规则扩展:
可以根据需求扩展验证规则,如手机号验证、URL 验证等。
错误信息:
错误信息可以根据需求自定义,支持多语言。
性能优化:
对于大量表单数据,建议对验证规则进行优化,避免重复验证。
安全性:
验证表单数据后,应对数据进行进一步处理(如过滤、转义),防止安全漏洞。
6. 总结
| 功能 | 说明 |
|---|---|
| 设置表单数据 | 支持数组形式的表单数据 |
| 设置验证规则 | 支持多种验证规则 |
| 执行验证 | 返回验证结果 |
| 获取错误信息 | 返回详细的错误信息 |
通过封装表单验证类,可以方便地在 PHP 项目中实现表单验证功能,确保用户输入数据的合法性和安全性。
希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, LeCMS, ClassCMS, Fastadmin, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。


