当前位置:首页 > PHP

php 实现表单验证

2026-01-15 13:35:35PHP

表单验证基础方法

使用内置函数和条件判断进行基础验证,例如检查空值、长度限制等:

$name = $_POST['name'] ?? '';
$email = $_POST['email'] ?? '';

$errors = [];

if (empty($name)) {
    $errors['name'] = '姓名不能为空';
} elseif (strlen($name) > 50) {
    $errors['name'] = '姓名长度不能超过50个字符';
}

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    $errors['email'] = '请输入有效的邮箱地址';
}

正则表达式验证

使用preg_match进行复杂格式验证,如密码强度、手机号等:

$password = $_POST['password'] ?? '';
if (!preg_match('/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$/', $password)) {
    $errors['password'] = '密码必须包含字母和数字,且长度至少8位';
}

文件上传验证

验证上传文件的类型、大小等属性:

$allowedTypes = ['image/jpeg', 'image/png'];
$maxSize = 2 * 1024 * 1024; // 2MB

if ($_FILES['avatar']['error'] === UPLOAD_ERR_OK) {
    if (!in_array($_FILES['avatar']['type'], $allowedTypes)) {
        $errors['avatar'] = '只允许上传JPEG或PNG图片';
    }
    if ($_FILES['avatar']['size'] > $maxSize) {
        $errors['avatar'] = '文件大小不能超过2MB';
    }
}

CSRF防护

生成并验证CSRF令牌防止跨站请求伪造:

session_start();

// 生成令牌
if (empty($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}

// 验证令牌
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'] ?? '')) {
        die('CSRF验证失败');
    }
}

使用过滤器扩展

利用filter_var函数进行多种标准验证:

$age = $_POST['age'] ?? '';
$url = $_POST['website'] ?? '';

if (!filter_var($age, FILTER_VALIDATE_INT, ['options' => ['min_range' => 18, 'max_range' => 100]])) {
    $errors['age'] = '年龄必须在18-100之间';
}

if (!filter_var($url, FILTER_VALIDATE_URL)) {
    $errors['website'] = '请输入有效的网址';
}

错误处理与显示

收集所有错误并返回给用户:

if (!empty($errors)) {
    foreach ($errors as $field => $message) {
        echo "<p>错误:$field - $message</p>";
    }
} else {
    // 处理表单数据
    echo "表单验证通过,正在处理...";
}

使用验证库

推荐使用专业的验证库如Respect/Validation:

require 'vendor/autoload.php';
use Respect\Validation\Validator as v;

$validator = v::key('email', v::email())
    ->key('password', v::length(8, null));

try {
    $validator->assert($_POST);
} catch (Exception $e) {
    $errors = $e->getMessages();
}

前端与后端协同验证

虽然前端验证可以提高用户体验,但必须配合后端验证:

// 前端示例验证
document.querySelector('form').addEventListener('submit', function(e) {
    let password = document.getElementById('password').value;
    if (password.length < 8) {
        alert('密码长度至少8位');
        e.preventDefault();
    }
});

php 实现表单验证

标签: 表单php
分享给朋友:

相关文章

php实现文件上传

php实现文件上传

文件上传的基本实现 在PHP中实现文件上传需要使用$_FILES超全局数组处理上传的文件数据。表单必须设置enctype="multipart/form-data"属性,并采用POST方法提交。…

css 制作表单

css 制作表单

使用 CSS 制作表单 表单是网页交互的重要组成部分,通过 CSS 可以美化表单元素,提升用户体验。以下是常见的表单样式设计方法。 基础表单结构 HTML 表单通常包含输入框、标签、按钮等元素。以下…

vue实现多行多个表单

vue实现多行多个表单

Vue 实现多行多个表单 在 Vue 中实现多行多个表单,通常需要动态生成表单字段,并确保数据绑定和提交逻辑正确。以下是实现方法: 动态表单数据绑定 使用 v-for 动态渲染多行表单,并通过 v…

form表单elementui

form表单elementui

Form 表单 ElementUI 使用指南 ElementUI 提供了强大的表单组件,支持数据绑定、验证和自定义样式等功能。以下是使用方法和常见场景的解决方案。 基本表单结构 使用 el-form…

vue 实现表单

vue 实现表单

Vue 表单实现方法 使用 Vue 实现表单可以通过多种方式,包括基础表单绑定、表单验证以及第三方库集成。以下是常见的实现方法: 基础表单绑定 Vue 提供了 v-model 指令实现表单元素的双向…

vue实现表单

vue实现表单

Vue 表单实现方法 基础表单绑定 Vue 提供了 v-model 指令实现表单元素的双向数据绑定。在组件中定义数据属性,通过 v-model 绑定到表单元素: <template>…