blakvghost/php-validator

PHPValidator 是一个用于在 PHP 应用程序中进行数据验证的现代 PHP 库。它提供了一种灵活且可扩展的方式来使用预定义的规则或通过创建自定义验证规则来验证数据。

v2.1.0 2024-05-18 16:40 UTC

This package is auto-updated.

Last update: 2024-09-18 17:29:31 UTC


README

logo PHPValidator

Packagist Version (custom server) Packagist Version (custom server) Packagist Version (custom server)

关于 PHPValidator

PHPValidator 是一个用于在 PHP 应用程序中进行数据验证的现代 PHP 库。它提供了一种灵活且可扩展的方式来使用预定义的规则或通过创建自定义验证规则来验证数据。

安装

使用 Composer 安装 PHPValidator

composer require blakvghost/php-validator

用法

use BlakvGhost\PHPValidator\Validator;
use BlakvGhost\PHPValidator\ValidatorException;

try {

    $data = [
        'username' => 'BlakvGhost',
        'email' => 'example@example.com',
        'score' => 42,
    ];
    // or
    // $data = $_POST;

    $validator = new Validator($data, [
        'username' => 'required|string',
        'email' => 'required|email',
        'score' => ['required','max:200', new CustomRule()],
        'password' => new CustomRule(),
    ]);

    if ($validator->isValid()) {
        echo "Validation passed!";
    } else {
        $errors = $validator->getErrors();
        print_r($errors);
    }
} catch (ValidatorException $e) {
    echo "Validation error: " . $e->getMessage();
}

您还可以自定义验证错误消息或 指定默认语言

$data = [
    'username' => 'BlakvGhost',
];

$validator = new Validator(
    $data,
    [
        'username' => 'required|string',
    ],
    [
        'username' => [
            'required' => 'Votre nom d\'utilisateur doit être présent',
            'string' => 'Votre nom d\'utilisateur doit forcément être une chaîne de caractère',
            ],
        ]
    );
    
    // For the default language
    $validator = new Validator($data, $rules, lang: 'fr');

功能

  • 预定义规则:PHPValidator 随附一系列预定义的验证规则,例如必填、字符串、电子邮件、最大长度等。

  • 自定义规则:通过实现 Rule 接口轻松创建自定义验证规则。

  • 多语言支持:使用 LangManager 根据应用程序的语言自定义验证错误消息。

预定义规则列表

PHPValidator 提供了各种预定义规则,您可以用作数据验证。以下是常用规则及其使用示例列表。

  1. 必填规则

    • 确保数据中存在字段。
    'username' => 'required'
  2. 字符串规则

    • 检查字段是否为字符串类型。
    'username' => 'string'
  3. 电子邮件规则

    • 验证字段是否为有效的电子邮件地址。
    'email' => 'email'
  4. 最大长度规则

    • 指定字符串字段的长度上限。
    'username' => 'max:25'
  5. 确认规则

    • 检查字段的值是否与另一个字段的值相同(通常用于密码确认)。
    'password_confirmation' => 'confirmed:password'
  6. 文件规则

    • 验证字段是否为文件上传。
    'file' => 'file'
  7. 接受规则

    • 验证字段是否为 "yes""on""1"true。对复选框很有用。
    'terms_and_conditions' => 'accepted'
  8. 如果接受规则

    • 验证字段是否接受另一个字段等于指定值。
    'terms_and_conditions' => 'accepted_if:is_adult,true'
  9. 活动URL规则

    • 验证字段是否为有效的、活动的 URL。
    'website' => 'active_url'
  10. 字母规则

    • 验证字段是否仅包含字母字符。
    'name' => 'alpha'
  11. 数字规则

    • 验证字段是否仅包含数字字符。
    'age' => 'numeric'
  12. 小写规则

    • 验证字段是否仅包含小写字母字符。
    'username' => 'lowercase'
  13. 大写规则

    • 验证字段是否仅包含大写字母字符。
    'username' => 'uppercase'
  14. 在规则

    • 验证字段的值是否在预定义值列表中。
    'role' => 'in:admin,editor,viewer'
  15. 可空规则

    • 允许字段为 null 或空。
    'optional_field' => 'nullable'
  16. 密码规则

    • 验证字段是否为 安全密码
    'password' => 'password'
  17. 相同规则

    • 验证字段的值是否与另一个字段的值相同。
    'password_confirmation' => 'same:password'
  18. 最大长度规则

    • 指定字符串字段的长度下限。
    'username' => 'min:8'
  19. 不在规则

    • 验证字段的值是否不在指定的集合中。
    'value' => 'not_in:foo,bar'
  20. 如果存在则必填规则

    • 如果另一个指定的字段存在,则要求字段存在。
    'firstname' => 'required_with:lastname',
  21. 有效IP规则

    • 验证字段的值是否为有效的 IP 地址。
    'client_ip' => 'ip',
  22. JSON规则

    • 验证字段的值是否为有效的 JSON 字符串。
    'config' => 'json',
  23. URL规则

    • 验证字段的值是否为有效的 URL。
    'website' => 'url',
  24. 字母数字规则

    • 验证字段的值是否仅包含字母数字字符。
    'pseudo' => 'alpha_num',
  25. 布尔规则

    • 验证字段的值是否为布尔值。
    'is_admin' => 'bool',
  26. 大小规则

    • 验证字符串、整数、数组或文件的大小是否等于指定值。
        [
            'string' =>'size:7', // strlen(string) == 7
            'integer' =>'size:7', // integer == 7
            'array' =>'size:7', // count(array) == 7
            'file' =>'size:512', // file size (kb) == 512
        ]
  27. 无需使用规则

    • 如果存在另一个指定的字段,则该字段不可存在。
    'email' => 'not_required_with:phone_number',

自定义规则

除了预定义的规则之外,您可以通过实现Rule接口来创建自定义验证规则。以下是如何创建和使用自定义规则的示例

CustomPasswordRule.php

// CustomPasswordRule.php
namespace YourNameSpace\Rules;

use BlakvGhost\PHPValidator\Contracts\Rule;

class CustomPasswordRule implements Rule
{
    protected $field;

    public function __construct(protected array $parameters = [])
    {
    }

    public function passes(string $field, $value, array $data): bool
    {
        $this->field = $field;
        // Implement your custom validation logic here
        // Example: Check if the password is equal to confirm_password
        return $value === $data['confirm_password'];
    }

    public function message(): string
    {
        return "Vos deux mot de passes ne sont pas identiques";
    }
}

在验证器中使用

  • 直接使用您的自定义类

    use BlakvGhost\PHPValidator\Validator;
    use BlakvGhost\PHPValidator\ValidatorException;
    
    use YourNameSpace\CustomPasswordRule;
    
    
    // ...
    
    try {
    
        $data = [
            'password' => '42',
            'confirm_password' => '142',
        ];
        // or
        // $data = $_POST;
    
        $validator = new Validator($data, [
            'password' => ['required', new CustomPasswordRule()],
        ]);
    
        if ($validator->isValid()) {
            echo "Validation passed!";
        } else {
            $errors = $validator->getErrors();
            print_r($errors);
        }
    } catch (ValidatorException $e) {
        echo "Validation error: " . $e->getMessage();
    }
  • 将您的自定义类添加到规则列表中,并像使用原生规则一样使用它

    use BlakvGhost\PHPValidator\Validator;
    use BlakvGhost\PHPValidator\ValidatorException;
    use BlakvGhost\PHPValidator\Mapping\RulesMaped;
    
    use YourNameSpace\CustomPasswordRule;
    
    // Add your rule here using an alias and the full namespace of your custom class
    RulesMaped::addRule('c_password', CustomPasswordRule::class);
    
    try {
    
        $data = [
            'password' => '42',
            'confirm_password' => '142',
        ];
    
        $validator = new Validator($data, [
            'password' => 'required|c_password',
        ]);
    
        if ($validator->isValid()) {
            echo "Validation passed!";
        } else {
            $errors = $validator->getErrors();
            print_r($errors);
        }
    } catch (ValidatorException $e) {
        echo "Validation error: " . $e->getMessage();
    }

在这个例子中,我们创建了一个CustomPasswordRule,用于检查密码是否与confirm_password相等。您可以根据需要自定义passes方法以实现特定的验证逻辑。

贡献

如果您想为PHPValidator做出贡献,请遵循我们的贡献指南

作者

支持

如果您需要支持,可以通过电子邮件dev@username-blakvghost.com联系我。如果您有任何问题或需要PHPValidator的帮助,请随时联系我。

许可证

PHPValidator是开源软件,采用MIT许可证。