haikara/verifier

There is no license information available for the latest version (0.1.0) of this package.

0.1.0 2024-08-20 12:29 UTC

This package is auto-updated.

Last update: 2024-10-20 12:49:42 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');