haikara / verifier
此包的最新版本(0.1.0)没有可用的许可证信息。
0.1.0
2024-08-20 12:29 UTC
Requires
- php: >=8.0 <8.4.0
- ext-ctype: *
- ext-mbstring: *
Requires (Dev)
- phpunit/phpunit: ^9.6
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());
获取过滤后的值
Integer
、Double
、Number
的验证会在内部进行类型转换。
想要获取类型转换后的值,可以按照以下方式编写。
$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);
alnum
或length
等条件按顺序判断,但
allowEmptyString
或nullable
优先于各种条件判断。
### カスタムバリデーション `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');