当前位置: 首页 > java >正文

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)。

http://www.xdnf.cn/news/13264.html

相关文章:

  • 在Jenkins上配置邮箱通知
  • 2025-03-15-位运算
  • 第一部分 -- ①语法分析的概要
  • Yolov5.6增加注意力机制+ByterTrack:目标检测与跟踪
  • Linux(Centos 7.6)命令详解:find
  • 揭秘OpenJDK 17字节码解释引擎:模板解释器深度解析
  • C++ 中的尾调用优化TCO:原理、实战与汇编分析
  • 鹰盾加密器如何对视频进行分析?
  • 工模、老化apk中Framewok定制开发的场景
  • Docker 操作容器[SpringBoot之Docker实战系列] - 第538篇
  • 常用数组方法、字符串方法、数组 ↔ 字符串 的转换、TS类型提示 (大全)
  • 二.Gitee分支管理
  • 端口转发和SSH隧道的含义详解及使用方法
  • 用哈希表封装myunordered_map和 myunordered_set(沉淀中)
  • 【Linux基础知识系列】第十七篇-使用Docker进行容器管理
  • 华为OD机试_2025 B卷_相对开音节(Python,100分)(附详细解题思路)
  • 大语言模型原理与书生大模型提示词工程实践-学习笔记
  • 目标跟踪_学习
  • GNSS位移监测站的作用
  • 龙蜥开发者说:我的龙蜥开源之旅 | 第 32 期
  • 寄存器被改写问题总结
  • 有符号变量与无符号变量的区别和联系
  • CANopen转Modbus TCP转换器助生产线智能化升级
  • 意图分类策略选择:小模型微调 vs 大模型 Prompt
  • 21、Create React App的使用
  • Vim 删除命令完整学习笔记
  • RocketMQ acl2.0使用体会:复杂度增加,安全性仍有欠缺
  • JS手写代码篇---手写浅拷贝
  • 376. Wiggle Subsequence
  • Golang dig框架与GraphQL的完美结合