PHP 过滤器不仅可以进行基础的 数据清理 和 验证,还支持 自定义选项 和 复杂的多条件过滤。本文将深入讲解 PHP 高级过滤器 的使用方法,帮助你更高效、安全地处理用户输入数据。
1. 高级 filter_var() 使用
filter_var() 是 PHP 过滤数据的核心函数。它不仅支持简单的 FILTER_VALIDATE_* 和 FILTER_SANITIZE_*,还可以结合 选项(options) 进行高级数据验证。
示例:检查整数范围
$number = 150;
$options = [
"options" => [
"min_range" => 1,
"max_range" => 100
]
];
if (filter_var($number, FILTER_VALIDATE_INT, $options)) {
echo "数字有效";
} else {
echo "数字超出范围";
}
📌 这里限制 number 的范围为 1 – 100,超出范围则返回 false。
2. 高级 filter_input() 用法
filter_input() 允许直接从 $_GET, $_POST, $_COOKIE, $_SERVER 等全局变量中获取并过滤数据。
示例:带选项的过滤
$age = filter_input(INPUT_GET, "age", FILTER_VALIDATE_INT, [
"options" => ["min_range" => 18, "max_range" => 60]
]);
if ($age !== false) {
echo "年龄符合要求";
} else {
echo "年龄超出范围或无效";
}
📌 filter_input() 适用于处理用户提交的表单数据,直接从 $_GET 或 $_POST 读取并过滤,避免 SQL 注入。
3. filter_input_array() 批量处理
在实际项目中,我们经常需要 一次性验证多个输入字段,filter_input_array() 可以批量过滤数据。
示例:批量过滤表单输入
$filters = [
"username" => FILTER_SANITIZE_STRING,
"email" => FILTER_VALIDATE_EMAIL,
"age" => [
"filter" => FILTER_VALIDATE_INT,
"options" => ["min_range" => 18, "max_range" => 100]
]
];
$input = filter_input_array(INPUT_POST, $filters);
if ($input["email"] && $input["age"] !== false) {
echo "数据有效";
} else {
echo "数据无效";
}
📌 filter_input_array() 让代码更 整洁,减少多个 filter_input() 的重复调用。
4. 自定义正则表达式过滤
PHP 允许使用 FILTER_VALIDATE_REGEXP 进行 正则表达式验证,适用于自定义规则的字符串数据。
示例:验证用户名格式
$options = [
"options" => [
"regexp" => "/^[a-zA-Z0-9_]{5,20}$/"
]
];
$username = "User_123";
if (filter_var($username, FILTER_VALIDATE_REGEXP, $options)) {
echo "用户名合法";
} else {
echo "用户名格式错误";
}
📌 这里的正则 要求用户名由 5-20 个字母、数字或下划线组成,如果格式错误则返回 false。
5. 高级 URL 过滤
PHP 过滤器 FILTER_VALIDATE_URL 允许对 URL 进行验证,但有时候我们需要检查 URL 是否包含 特定协议(https) 或 必须带有查询参数。
示例:强制 HTTPS URL
$url = "https://www.example.com";
$options = [
"options" => [
"regexp" => "/^https:\/\/[a-zA-Z0-9\-\.]+\.[a-z]{2,}\/?/"
]
];
if (filter_var($url, FILTER_VALIDATE_REGEXP, $options)) {
echo "有效的 HTTPS URL";
} else {
echo "无效的 URL(必须是 HTTPS)";
}
📌 这里的正则表达式要求 URL 必须是 https:// 开头,不符合则返回 false。
6. 过滤 JSON 数据
在 API 开发中,很多时候我们需要过滤 JSON 输入,确保其格式正确并转换为 PHP 数组。
示例:解析和验证 JSON
$json = '{"name": "Tom", "age": 25}';
$data = json_decode($json, true);
if (json_last_error() === JSON_ERROR_NONE) {
$name = filter_var($data['name'], FILTER_SANITIZE_STRING);
$age = filter_var($data['age'], FILTER_VALIDATE_INT, [
"options" => ["min_range" => 18, "max_range" => 60]
]);
if ($name && $age !== false) {
echo "JSON 数据有效";
} else {
echo "JSON 数据无效";
}
} else {
echo "JSON 解析错误";
}
📌 这里先使用 json_decode() 解析 JSON,然后对 name 和 age 进行过滤,确保数据安全。
7. 过滤 IP 和 MAC 地址
PHP 提供了 FILTER_VALIDATE_IP 和 FILTER_VALIDATE_MAC 过滤器,可用于检查 IPv4 / IPv6 地址和 MAC 地址。
示例:只允许 IPv4
$ip = "192.168.1.100";
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
echo "有效的 IPv4 地址";
} else {
echo "无效 IP";
}
示例:验证 MAC 地址
$mac = "00:1A:2B:3C:4D:5E";
if (filter_var($mac, FILTER_VALIDATE_MAC)) {
echo "有效的 MAC 地址";
} else {
echo "无效 MAC 地址";
}
📌 FILTER_FLAG_IPV4 确保 IP 只允许 IPv4,FILTER_VALIDATE_MAC 用于 检查 MAC 地址 格式。
8. 综合案例:安全处理用户注册
$filters = [
"username" => [
"filter" => FILTER_VALIDATE_REGEXP,
"options" => ["regexp" => "/^[a-zA-Z0-9_]{5,20}$/"]
],
"email" => FILTER_VALIDATE_EMAIL,
"password" => FILTER_SANITIZE_STRING,
"age" => [
"filter" => FILTER_VALIDATE_INT,
"options" => ["min_range" => 18, "max_range" => 100]
]
];
$user_data = filter_input_array(INPUT_POST, $filters);
if ($user_data && $user_data["email"] && $user_data["age"] !== false) {
echo "注册成功";
} else {
echo "输入数据无效";
}
📌 这个示例确保:
- 用户名格式正确
- Email 合法
- 密码进行了基础清理
- 年龄在 18-100 之间
9. 总结
| 过滤方式 | 适用场景 |
|---|---|
filter_var() | 过滤单个变量 |
filter_input() | 过滤 $_GET, $_POST 变量 |
filter_input_array() | 批量过滤输入数据 |
FILTER_VALIDATE_* | 用于 验证 数据格式 |
FILTER_SANITIZE_* | 用于 清理 数据 |
FILTER_VALIDATE_REGEXP | 用正则表达式进行高级验证 |
FILTER_VALIDATE_IP / MAC | 验证 IP / MAC 地址 |
✅ PHP 高级过滤器提供了一套强大的数据验证机制,结合 filter_input_array() 和正则表达式,可有效提升数据安全性! 🚀
更多详细内容请关注其他相关文章!