PHP 多种内置的验证规则和函数

发布于:2025-06-12 ⋅ 阅读:(17) ⋅ 点赞:(0)

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 的验证功能,提供了更丰富的规则(如 requireduniqueexists 等)。
示例(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() 验证日期是否有效

注意事项

  1. 安全性:验证后仍需对数据进行过滤(如 htmlspecialchars())以防止 XSS 或 SQL 注入。
  2. 灵活性:复杂验证可通过结合 filter_var()preg_match() 实现。
  3. 框架扩展:Laravel 等框架的验证规则更简洁,适合大型项目。

如果需要更复杂的验证逻辑,可以结合使用内置函数和第三方库(如 Respect\Validation)。