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 的验证功能,提供了更丰富的规则(如 requireduniqueexists 等)。
示例(Laravel):

$rules = [
    'name' => 'required|string|max:255',
    'email' => 'required|email|unique:users',
];

总结

验证类型方法/函数描述
邮箱FILTER_VALIDATE_EMAIL验证电子邮件地址
URLFILTER_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)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咖啡续命又一天

一杯续命美式,续写下一篇干货

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值