news 2026/6/8 13:03:29

PHP表单验证与数据过滤技术

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PHP表单验证与数据过滤技术

PHP表单验证与数据过滤技术

表单验证是Web开发的基础。后端验证是必不可少的,不能依赖前端的验证。今天说说PHP中表单验证的实现。

filter_var系列函数是PHP内置的验证工具。

```php
$values = [
'email' => 'test@example.com',
'url' => 'https://www.example.com',
'ip' => '192.168.1.1',
];

echo "邮箱: " . (filter_var($values['email'], FILTER_VALIDATE_EMAIL) ?: '无效') . "\n";
echo "URL: " . (filter_var($values['url'], FILTER_VALIDATE_URL) ?: '无效') . "\n";
echo "IP: " . (filter_var($values['ip'], FILTER_VALIDATE_IP) ?: '无效') . "\n";

$intVal = filter_var('42', FILTER_VALIDATE_INT, ['options' => ['min_range' => 1, 'max_range' => 100]]);
echo "整数: " . ($intVal !== false ? $intVal : '无效') . "\n";

$boolVal = filter_var('yes', FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
echo "布尔值: " . ($boolVal !== null ? ($boolVal ? 'true' : 'false') : '无效') . "\n";
?>
>

一个完整的验证器实现。

```php
class Validator
{
private array $data;
private array $rules;
private array $errors = [];
private array $validated = [];

public function __construct(array $data, array $rules)
{
$this->data = $data;
$this->rules = $rules;
$this->validate();
}

public function fails(): bool { return !empty($this->errors); }
public function errors(): array { return $this->errors; }
public function validated(): array { return $this->validated; }

private function validate(): void
{
foreach ($this->rules as $field => $ruleSet) {
$value = $this->data[$field] ?? null;
$rules = is_string($ruleSet) ? explode('|', $ruleSet) : $ruleSet;

foreach ($rules as $rule) {
$error = $this->applyRule($field, $value, $rule);
if ($error !== null) {
$this->errors[$field] = $error;
break;
}
}

if (!isset($this->errors[$field])) {
$this->validated[$field] = $value;
}
}
}

private function applyRule(string $field, mixed $value, string $rule): ?string
{
$params = [];
if (str_contains($rule, ':')) {
[$rule, $paramStr] = explode(':', $rule, 2);
$params = explode(',', $paramStr);
}

if ($value === null || $value === '') {
if ($rule === 'required') return "{$field}不能为空";
return null;
}

return match ($rule) {
'email' => !filter_var($value, FILTER_VALIDATE_EMAIL) ? "{$field}不是有效的邮箱" : null,
'url' => !filter_var($value, FILTER_VALIDATE_URL) ? "{$field}不是有效的URL" : null,
'numeric' => !is_numeric($value) ? "{$field}必须是数字" : null,
'integer' => !filter_var($value, FILTER_VALIDATE_INT) ? "{$field}必须是整数" : null,
'min' => (float)$value < (float)($params[0] ?? 0) ? "{$field}不能小于{$params[0]}" : null,
'max' => (float)$value > (float)($params[0] ?? 0) ? "{$field}不能大于{$params[0]}" : null,
'min_length' => mb_strlen((string)$value) < (int)($params[0] ?? 0) ? "{$field}长度不能小于{$params[0]}" : null,
'max_length' => mb_strlen((string)$value) > (int)($params[0] ?? 0) ? "{$field}长度不能大于{$params[0]}" : null,
'in' => !in_array((string)$value, $params) ? "{$field}不在允许的值范围内" : null,
default => null,
};
}
}

$data = ['name' => '张', 'email' => 'invalid', 'age' => 200];
$rules = ['name' => 'required|min_length:2|max_length:50', 'email' => 'required|email', 'age' => 'required|numeric|min:1|max:150'];

$validator = new Validator($data, $rules);
if ($validator->fails()) {
foreach ($validator->errors() as $field => $error) {
echo "{$field}: {$error}\n";
}
} else {
print_r($validator->validated());
}
?>

数据过滤和净化同样重要。

```php
$dirtyInput = [
'email' => "test@exa\tmple.com\n",
'string' => "",
'int' => "abc123def456",
];

echo "净化邮箱: " . filter_var($dirtyInput['email'], FILTER_SANITIZE_EMAIL) . "\n";
echo "净化整数: " . filter_var($dirtyInput['int'], FILTER_SANITIZE_NUMBER_INT) . "\n";
echo "转义HTML: " . htmlspecialchars($dirtyInput['string'], ENT_QUOTES, 'UTF-8') . "\n";
?>
>

表单验证的关键是后端验证不可少,不能依赖前端验证。验证规则要覆盖必填、格式、长度、范围等。好的表单系统能让前后端协作更高效,也能提升用户体验。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/8 13:01:24

YOLO11后处理优化 | 引入DIoU-NMS替代传统NMS,解决高重叠目标误删,召回率大幅提升

📌 写在前面 上周在调试一个安防场景的YOLO11模型时,遇到了一个令人头疼的问题:检测结果在常规数据集上mAP表现很不错,但一放到真实监控画面——密集人群、车辆拥堵、货架堆叠,模型就频繁漏检。可视化中间特征图发现,模型其实对两个目标都有响应,但最终输出只剩下一个…

作者头像 李华
网站建设 2026/6/8 12:58:22

如何将Android设备变身为专业FT8数字通信终端?FT8CN完整实践指南

如何将Android设备变身为专业FT8数字通信终端&#xff1f;FT8CN完整实践指南 【免费下载链接】FT8CN Run FT8 on Android 项目地址: https://gitcode.com/gh_mirrors/ft/FT8CN 你是否想过将手中的Android手机或平板电脑变成专业的FT8数字通信设备&#xff1f;FT8CN正是…

作者头像 李华
网站建设 2026/6/8 12:56:04

i.MX SDRAM控制器配置全解析:从原理到实战避坑指南

1. 项目概述与核心价值 在嵌入式系统开发中&#xff0c;尤其是基于飞思卡尔&#xff08;现恩智浦&#xff09;i.MX系列这类高性能应用处理器的项目中&#xff0c;SDRAM控制器的配置往往是硬件工程师和底层驱动开发者必须啃下的硬骨头。它不像GPIO那样简单直接&#xff0c;也不像…

作者头像 李华
网站建设 2026/6/8 12:55:56

3分钟搞定B站缓存视频:m4s-converter让你的离线视频重获新生

3分钟搞定B站缓存视频&#xff1a;m4s-converter让你的离线视频重获新生 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经遇到过这样的…

作者头像 李华