mousav1/validify

Validify 是一个强大的 PHP 验证库,它提供灵活且可定制的验证规则、错误处理和预验证回调。

v1.0.0 2024-08-27 05:57 UTC

This package is auto-updated.

Last update: 2024-10-01 08:15:26 UTC


README

介绍

Validify 是一个简单、可扩展且灵活的 PHP 验证库。它允许开发者为他们的数据输入定义验证规则并轻松验证它们。此包提供一组内置规则,也支持自定义验证规则。

特性

  • 简单 API:易于使用的 API 用于定义验证规则。
  • 可定制:允许添加自定义验证规则。
  • 通配符支持:支持使用点表示法验证嵌套数据结构。
  • 预验证回调:支持在验证之前执行自定义逻辑。
  • 条件验证:根据动态条件应用验证规则。
  • 日期和时间验证:使用内置规则验证日期和时间字段。
  • 灵活的规则定义:支持使用数组和字符串格式定义规则。

安装

您可以通过 Composer 安装此包

composer require mousav1/validify

用法

基本验证

use Mousav1\Validify\Validator;

$data = [
    'username' => 'john_doe',
    'email' => 'john@example.com',
    'age' => 25,
];

$validator = new Validator($data,[
    'username' => ['required', 'alpha'],
    'email' => ['required', 'email'],
    'age' => ['required', 'numeric', 'min:18'],
]);

if (!$validator->validate()) {
   print_r($validator->getErrors());
}

流畅验证

Validify 包允许您使用流畅接口定义规则,使您的验证逻辑更易于阅读

use Mousav1\Validify\Validator;

$data = [
    'name' => 'prefix_name',
];

$validator = new Validator($data);

$validator->field('name')
    ->required()
    ->startsWith('prefix')
    ->applyRules();

if (!$validator->validate()) {
   print_r($validator->getErrors());
}

自定义验证规则

您可以通过自定义规则扩展验证器

use Mousav1\Validify\Validator;

Validator::extend('even', function () {
    return new class {
        public function passes($field, $value) {
            return $value % 2 === 0;
        }
        public function name(): string{
            return "even"
        }
        public function message($field) {
            return "{$field} must be an even number.";
        }
    };
});

$data = ['number' => 3];

$validator = new Validator($data,[
    'number' => ['even']
]);

if (!$validator->validate()) {
   print_r($validator->getErrors());
}

条件验证

条件验证允许您在满足特定条件时仅对某些字段应用验证规则。当您想要根据其他字段的值或动态条件来验证字段时,此功能非常有用。

$data = [
    'age' => 20,
    'license' => ''
];

$validator = new Validator($data);

// Adding a conditional rule
$validator->addConditionalRule('license', ['required'], function ($data) {
    return $data['age'] > 18;
});

if (!$validator->validate()) {
   print_r($validator->getErrors());
}

日期和时间验证

Validify 包包含验证日期和时间字段的规则。您可以使用这些规则确保您的日期和时间输入符合特定标准。

日期格式
$data = [
    'birthdate' => '2024-09-01',
];

$validator = new Validator($data, [
    'birthdate' => ['required', 'date_format:Y-m-d'],
]);

if (!$validator->validate()) {
   print_r($validator->getErrors());
}
规则之后
$data = [
    'start_date' => '2024-01-01',
    'end_date' => '2024-02-01',
    'new_date' => '2024-02-01',
];

$validator = new Validator($data, [
    'end_date' => ['required', 'date_format:Y-m-d', 'after:start_date'],
    'new_date' => ['required', 'date_format:Y-m-d', 'after:2024-01-01'],
]);

if (!$validator->validate()) {
   print_r($validator->getErrors());
}
规则之前
$data = [
    'start_date' => '2024-01-01',
    'end_date' => '2024-12-31',
    'new_date' => '2024-12-30',
];

$validator = new Validator($data, [
    'start_date' => ['required', 'date_format:Y-m-d'],
    'end_date' => ['required', 'date_format:Y-m-d', 'before:start_date'],
    'new_date' => ['required', 'date_format:Y-m-d', 'before:2024-12-31'],
]);

if (!$validator->validate()) {
   print_r($validator->getErrors());
}

自定义错误消息

您可以为特定字段和规则定义自定义错误消息

use Mousav1\Validify\Validator;

$data = [
    'username' => '',
    'email' => 'invalid-email',
];

$validator = new Validator($data,[
    'username' => ['required'],
    'email' => ['required', 'email'],
]);

$validator->setCustomMessages([
    'username.required' => 'The username field cannot be empty.',
    'email.email' => 'Please provide a valid email address.',
]);

if (!$validator->validate()) {
   print_r($validator->getErrors());
}

字段别名

您可以为字段名称设置别名以提供用户友好的错误消息

$validator->setAliases([
    'email' => 'Email Address'
]);

$validator->validate();

print_r($validator->getErrors()); // Errors will display "Email Address" instead of "email".

预验证回调

您可以定义在验证过程开始之前运行的回调

$validator->beforeValidate(function (&$data) {
    $data['username'] = strtolower($data['username']);
});

可用规则

  • required
  • email
  • min
  • max
  • numeric
  • confirmed
  • url
  • in
  • between
  • regex
  • alpha
  • optional
  • required_with