php实现验证
验证表单输入
在PHP中验证表单输入是常见的需求。使用filter_var函数可以方便地进行基本验证:
$email = "test@example.com";
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "有效的邮箱地址";
} else {
echo "无效的邮箱地址";
}
正则表达式验证
对于更复杂的验证规则,可以使用正则表达式:
$username = "user123";
if (preg_match("/^[a-zA-Z0-9_]{5,20}$/", $username)) {
echo "有效的用户名";
} else {
echo "用户名必须为5-20位的字母、数字或下划线";
}
密码强度验证
验证密码强度需要检查多个条件:
$password = "Password123!";
$hasUppercase = preg_match("/[A-Z]/", $password);
$hasLowercase = preg_match("/[a-z]/", $password);
$hasNumber = preg_match("/[0-9]/", $password);
$hasSpecial = preg_match("/[!@#$%^&*()\-_=+{};:,<.>]/", $password);
if (strlen($password) >= 8 && $hasUppercase && $hasLowercase && $hasNumber && $hasSpecial) {
echo "密码强度足够";
} else {
echo "密码必须包含大小写字母、数字和特殊字符,且长度至少8位";
}
文件上传验证
验证上传文件时需检查多个方面:
$allowedTypes = ["image/jpeg", "image/png"];
$maxSize = 2 * 1024 * 1024; // 2MB
if ($_FILES["file"]["error"] === UPLOAD_ERR_OK) {
$fileType = $_FILES["file"]["type"];
$fileSize = $_FILES["file"]["size"];
if (in_array($fileType, $allowedTypes) && $fileSize <= $maxSize) {
echo "文件验证通过";
} else {
echo "文件类型或大小不符合要求";
}
} else {
echo "文件上传错误";
}
CSRF令牌验证
防止CSRF攻击需要验证令牌:
session_start();
if ($_SERVER["REQUEST_METHOD"] === "POST") {
if (!isset($_POST["csrf_token"]) || $_POST["csrf_token"] !== $_SESSION["csrf_token"]) {
die("CSRF验证失败");
}
// 处理表单数据
}
// 生成CSRF令牌
$_SESSION["csrf_token"] = bin2hex(random_bytes(32));
数据库输入验证
处理数据库输入前应进行验证和转义:
$db = new PDO("mysql:host=localhost;dbname=test", "user", "pass");
$username = "test'; DROP TABLE users;--";
$stmt = $db->prepare("SELECT * FROM users WHERE username = :username");
$stmt->bindParam(":username", $username, PDO::PARAM_STR);
$stmt->execute();
验证码验证
实现验证码功能需要会话支持:

session_start();
// 生成验证码
$code = rand(1000, 9999);
$_SESSION["captcha"] = $code;
// 验证用户输入
if ($_POST["captcha"] == $_SESSION["captcha"]) {
echo "验证码正确";
} else {
echo "验证码错误";
}






