PHP 多种内置的验证规则和函数
PHP 提供了多种内置的验证规则和函数,用于处理用户输入的数据验证。以下是 PHP 内置的常见验证规则和函数的总结:
1. filter_var()
函数
filter_var()
是 PHP 中最常用的内置验证函数之一,配合预定义的过滤器(FILTER_*
常量)进行数据验证。
常用过滤器:
-
FILTER_VALIDATE_EMAIL
验证电子邮件地址格式是否有效。$email = "test@example.com"; if (filter_var($email, FILTER_VALIDATE_EMAIL)) {echo "有效邮件地址"; } else {echo "无效邮件地址"; }
-
FILTER_VALIDATE_URL
验证 URL 格式是否正确(可选参数FILTER_FLAG_HOST_REQUIRED
等)。$url = "https://www.example.com"; if (filter_var($url, FILTER_VALIDATE_URL)) {echo "有效 URL"; } else {echo "无效 URL"; }
-
FILTER_VALIDATE_INT
验证整数并可设置范围限制。$age = "25"; if (filter_var($age, FILTER_VALIDATE_INT, ["options" => ["min_range" => 18, "max_range" => 65]])) {echo "年龄有效"; } else {echo "年龄无效"; }
-
FILTER_VALIDATE_FLOAT
验证浮点数。$price = "19.99"; if (filter_var($price, FILTER_VALIDATE_FLOAT)) {echo "价格有效"; } else {echo "价格无效"; }
-
FILTER_VALIDATE_BOOLEAN
验证布尔值(返回true
/false
或字符串 “1”/“0”)。$value = "1"; if (filter_var($value, FILTER_VALIDATE_BOOLEAN)) {echo "布尔值为 true"; } else {echo "布尔值为 false"; }
-
FILTER_VALIDATE_REGEXP
使用自定义正则表达式验证。$phone = "13812345678"; if (filter_var($phone, FILTER_VALIDATE_REGEXP, ["options" => ["regexp" => "/^1[3456789]\d{9}$/"]])) {echo "手机号有效"; } else {echo "手机号无效"; }
2. filter_var_array()
函数
用于一次性验证多个字段的数据,返回验证后的数组结果。
$data = ["email" => "test@example.com","age" => "25","url" => "https://www.example.com"
];$rules = ["email" => FILTER_VALIDATE_EMAIL,"age" => ["filter" => FILTER_VALIDATE_INT, "options" => ["min_range" => 18]],"url" => FILTER_VALIDATE_URL
];$result = filter_var_array($data, $rules);
print_r($result); // 输出验证后的值或 false
3. 类型检查函数
PHP 提供了一些内置函数用于检查数据类型:
is_string()
:验证是否为字符串。is_int()
/is_integer()
:验证是否为整数。is_float()
/is_double()
:验证是否为浮点数。is_bool()
:验证是否为布尔值。is_numeric()
:验证是否为数字或数字字符串。is_array()
:验证是否为数组。is_null()
:验证是否为null
。
示例:
$value = "123";
if (is_numeric($value)) {echo "值是数字";
} else {echo "值不是数字";
}
4. 正则表达式验证
PHP 的 preg_match()
函数可用于自定义正则表达式验证。
示例:
$password = "SecurePass123!";
if (preg_match("/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).+$/", $password)) {echo "密码符合要求";
} else {echo "密码不符合要求";
}
5. 空值检查
empty()
:检查变量是否为空(null
、空字符串、空数组等)。isset()
:检查变量是否已设置且非null
。
示例:
$username = "";
if (empty($username)) {echo "用户名为空";
} else {echo "用户名有效";
}
6. 其他验证方法
-
strlen()
:验证字符串长度。$password = "123456"; if (strlen($password) >= 8) {echo "密码长度有效"; } else {echo "密码太短"; }
-
checkdate()
:验证日期是否有效。$month = 13; $day = 32; $year = 2025; if (checkdate($month, $day, $year)) {echo "日期有效"; } else {echo "日期无效"; }
7. Laravel 等框架的验证规则(基于 PHP 扩展)
虽然不属于 PHP 核心,但 Laravel 等框架扩展了 PHP 的验证功能,提供了更丰富的规则(如 required
、unique
、exists
等)。
示例(Laravel):
$rules = ['name' => 'required|string|max:255','email' => 'required|email|unique:users',
];
总结
验证类型 | 方法/函数 | 描述 |
---|---|---|
邮箱 | FILTER_VALIDATE_EMAIL | 验证电子邮件地址 |
URL | FILTER_VALIDATE_URL | 验证 URL 格式 |
整数 | FILTER_VALIDATE_INT | 验证整数及范围 |
浮点数 | FILTER_VALIDATE_FLOAT | 验证浮点数 |
布尔值 | FILTER_VALIDATE_BOOLEAN | 验证布尔值 |
正则表达式 | FILTER_VALIDATE_REGEXP | 自定义正则验证 |
多字段验证 | filter_var_array() | 批量验证多个字段 |
类型检查 | is_*() 函数 | 验证数据类型 |
空值检查 | empty() 、isset() | 检查变量是否存在或为空 |
字符串长度 | strlen() | 验证字符串长度 |
日期验证 | checkdate() | 验证日期是否有效 |
注意事项
- 安全性:验证后仍需对数据进行过滤(如
htmlspecialchars()
)以防止 XSS 或 SQL 注入。 - 灵活性:复杂验证可通过结合
filter_var()
和preg_match()
实现。 - 框架扩展:Laravel 等框架的验证规则更简洁,适合大型项目。
如果需要更复杂的验证逻辑,可以结合使用内置函数和第三方库(如 Respect\Validation
)。