haikara/verifier

此包的最新版本(0.1.0)没有可用的许可证信息。

0.1.0 2024-08-20 12:29 UTC

This package is auto-updated.

Last update: 2024-09-20 12:35:39 UTC


README

使用简洁的签名指定条件的有效性验证库。

安装

composer require knp/verifier

基本用法

$verifier = new Knp\Verifier\Verifier\Verifier();

// テストデータはすべてバリデーションを通る値
$post = [
    'customer_name' => 'テスト',
    'customer_code' => 'A0000001',
    'category_id' => '1'
];

// 非空文字
$verifier->case(
    'customer_name', // 項目名
    $post['customer_name'] ?? '', // 検証する値
    Rules::string()->nonEmptyString() // 検証条件
);

// 半角英数字、8文字
$verifier->case(
    'customer_code',
    $post['customer_code'] ?? '',
    Rules::string()->alnum()->length(8)
);

// 半角数字、1以上
$verifier->case(
    'category_id',
    $post['category_id'] ?? null,
    Rules::integer()->min(1)
);

// すべての項目が条件を満たせばtrueが返る
var_dump($verifier->verify());

获取过滤后的值

IntegerDoubleNumber的验证会在内部进行类型转换。
想要获取类型转换后的值,可以按照以下方式编写。

$post = [
    'year' => '2023'
    'month' => '13',
];

// 1994以上の整数
$verifier->case(
    'year',
    $post['year'] ?? null,
    Rules::integer()->min(1994)
);

// (int)2023が返る
$year = $verifier->getCase('year')->getValue();

// 1から12
$monthCase = $verifier->case(
    'month',
    $post['month'] ?? null,
    Rules::integer()->range(1, 12)
);

// 条件を満たさないのでfalseが返る
$month = $monthCase->getValue();

允许特定值

指定字符串验证条件的同时,也允许空字符串的例子。

// 空文字が弾かれる
Rules::string()->alnum();

// 半角英数字、もしくは空文を許可したい場合
Rules::string()->alnum()->allowEmptyString();

// こちらでも可
Rules::string()->alnum()->allow('');

指定整数验证条件的同时,也允许null的例子。

// 1以上の整数、もしくはnull
Rules::integer()->min(1)->nullable();

// こちらでも可
Rules::integer()->min(1)->allow(null);

alnumlength等条件按顺序判断,但
allowEmptyStringnullable优先于各种条件判断。

### カスタムバリデーション

`add`で任意の条件を追加する。

```PHP
// メールアドレス、.co.jpのみ許可
Rules::string()->email()
    ->add(
        'email_domain_cojp', // 検証条件名。無理矢理にでも何か指定する。
        fn ($value) => str_ends_with($value, '.co.jp') // 検証関数。検証する値を受け取り、bool値を返すことが必要。
    );

错误消息

可以在验证项中注册错误消息。

$verifier
    ->case(
        'customer_name',
        $post['customer_name'] ?? '',
        Rules::string()->nonEmptyString()
    )
    ->setMessage('名前を入力ください。');

// 半角英数字、8文字
$verifier
    ->case(
        'customer_code',
        $post['customer_code'] ?? '',
        Rules::string()->alnum()->length(8)
    )
    ->setmessage('顧客コードを半角英数字8文字で入力ください。');

// 半角数字、1以上
$verifier
    ->case(
        'category_id',
        $post['category_id'] ?? null,
        Rules::integer()->min(1)
    )
    ->setMessage('カテゴリを選択ください。');

if (!$verifier->verify()) {
    // 検証で弾かれた項目のエラーメッセージの配列を取得
    $error_messages = $verifier->getMessages();
}

字符串验证

// 基本。空文字も含む全ての文字列を許可する。
Rules::string();

// 空文字を弾く場合。
Rules::integer()->notEmptyString();

字符数

// 文字数を検証する。mb_strlenで判定しているのでマルチバイト文字も可。
Rules::string()->length(8);

字符串搜索

// 部分一致
Rules::string()->contain('探したい文字列');

// 前方一致
Rules::string()->startsWith('探したい文字列');

// 後方一致
Rules::string()->startsWith('探したい文字列');

字符种类

对字符串中包含的字符种类的限制。

// 半角英数字のみ
Rules::string()->alnum();

// 半角英字のみ
Rules::string()->alpha();

// 半角数字のみ
Rules::string()->digit();

电子邮件地址

验证字符串是否为电子邮件地址格式。

Rules::string()->email();

UUID

验证字符串是否为UUID格式。

Rules::string()->uuid();

// UUIDv4形式のみ
Rules::string()->uuid(4);

正则表达式

Rules::string()->pregMatch('/^探したい文字列/');

数值验证

  • Rules::integer
  • Rules::float
  • Rules::number

共同用法

// 最低値の指定
Rules::integer()->min(1);

// 最大値の指定
Rules::integer()->min(1);

// 最低値と最大値の範囲指定
Rules::integer()->range(1, 12);

Rules::integer()

// 桁数の指定
Rules::integer()->length(4); // 4桁の整数のみ

文件名

// 拡張子の指定
Rules::file()->ext('.jpg', '.png', '.gif');

Rules::string()的扩展,也可以这样写

// thumb_で始まる、JPEGかPNGかGIFのファイル名
Rules::file()
    ->startsWith('thumb_')
    ->ext('.jpg', '.png', '.gif');