PHP验证器类Validator

杜轩昂
2023-12-01

Particle\Validator是一个小巧优雅的实用的PHP验证类库,提供了一个非常简洁的API。它无需依赖其他组件,提供友好的文档,并且有利于扩展。

安装

 composer require particle/validator

使用

在使用之前请确保在项目中引入了 vendor/autoload.php 文件

Code:
    1. <?php 
    2. use Particle\Validator\Validator;
    3. require './vendor/autoload.php';
    4. $v = new Validator;
    5. $v->required('first_name')->lengthBetween(2, 30)->alpha();
    6. $v->required('last_name')->lengthBetween(2, 40)->alpha();
    7. $data = [
    8. 'first_name' => 'John',
    9. 'last_name' => 'Doe',
    10. ];
    11. $result = $v->validate($data);
    12. $result->isValid();  // 返回bool(true or false)

这个方法是内置的,主要用于检测某个key的值,如果希望检测的某个值可能为空,而希望验证通过,则我们可以设置该方法的第三个参数为true。(默认值为false 代表不能为空值)。其中 required 和 optional 的区别主要是如下 required 是验证的值必须存在;而 optional 是可选的,如果key存在,则验证,不存在,则不用验证。

数组方式验证

Code:
    1. // 基本验证
    2. $values = [
    3. 'user' => [
    4. 'username' => 'bob', 
    5. ]
    6. ];
    7. $v = new Validator;
    8. $v->required('user.username')->alpha();
    9. $result = $v->validate($values);
    10. $result->getValues() === $values; // bool(true)

内置验证规则 > allowEmpty(callable $callback)是否可以为空值,true则通过 反之亦然

Code:
    1. $v = new Validator;
    2. // 如果用户名存在,则验证通过
    3. $v->required('name')->allowEmpty(function (array $values) {
    4. return $values['namePresent'] === true;
    5. });
    6. $v->validate(['namePresent' => true, 'name' => 'John'])->isValid(); // true
    7. $v->validate(['namePresent' => true])->isValid(); // true
    8. $v->validate(['namePresent' => false])->isValid(); // false

alnum($allowWhitespace = false) 包含数字和字母,不允许空格,(a-z, A-Z, 0-9)
alpha($allowWhitespace = false) 验证的字符包含 (a-z, A-Z),不允许空格。
between($min, $max) 验证必须在一个数值范围,如(12, 34)。
bool() 布尔Boolean值验证。
callback(callable $callable) 回调验证。
creditCard() 验证信用卡,验证之前必须先安装 composer require byrokrat/checkdigit。
datetime($format = null) 验证日期。
digits() 一串数字字符串验证,不包含小数。
each(callable $callable) 遍历验证。
email() 验证邮箱。
equals($value) 验证是否相等。
float()验证浮点数。
greaterThan($value) 大于某个值。
hash($hashAlgorithm, $allowUppercase = false) md5 sha1等验证。
inArray(array $array, $strict = true) 验证是否属于数组范围内
integer($strict = false) 整数验证。
isArray() 数组验证。
json()json格式字符串验证。
length($length) 长度验证。
lengthBetween($min, $max) 长度范围验证。
lessThan($value) 小于验证。
numeric() 验证浮点数和整数。
phone($countryCode) 验证手机号,使用之前先安装 composer require giggsey/libphonenumber-for-php。
regex($regex) 正则验证。
required(callable $callback) 必须存在,不能为空。
string() 字符串验证。
url($schemes = []) 验证URL。
uuid($version = Uuid::VALID_FORMAT) 验证UUID。
提示信息覆盖
Particle\Validator为默认规则提供了默认的消息提示,当然你也可以为验证规则设置特定的消息提示以覆盖默认值。

Code:
    1. $v = new Validator;
    2. $v->required('first_name')->lengthBetween(0, 5);
    3. $v->required('last_name')->lengthBetween(0, 5);
    4. $v->overwriteDefaultMessages([
    5. LengthBetween::TOO_LONG => 'It\'s too long, that value'
    6. ]);
    7. $v->overwriteMessages([
    8. 'first_name' => [
    9. LengthBetween::TOO_LONG => 'First name is too long, mate'
    10. ]
    11. ]);
    12. $result = $v->validate([
    13. 'first_name' => 'this is too long',
    14. 'last_name' => 'this is also too long',
    15. ]);
    16. var_dump($result->getMessages());

验证场景

验证库一般都可以根据场景来使用不同的验证,比如插入数据和更新数据的区别

Code:
    1. $v = new Validator;
    2. // 定义一个插入时候的验证规则
    3. $v->context('insert', function(Validator $context) {
    4. $context->required('first_name')->lengthBetween(2, 30);
    5. });
    6. // 定义一个更新时候的验证规则
    7. $v->context('update', function(Validator $context) {
    8. $context->optional('first_name')->lengthBetween(2, 30);
    9. });
    10. $v->validate([], 'update')->isValid(); // bool(true)
    11. $v->validate([], 'insert')->isValid(); // bool(false), because first_name is required.

在MVC架构中使用验证器

很多时候,我们的项目都是进行分层开发的,例如常见的MVC,则我们可以在分层项目中调用该验证类,示例如下:

Code:
    1. use Particle\Validator\ValidationResult;
    2. use Particle\Validator\Validator;
    3. class MyEntity 
    4. {
    5. protected $id;
    6. public function setId($id)
    7. {
    8. $this->id = $id;
    9. return $this;
    10. }
    11. public function validate() {
    12. $v = new Validator;
    13. $v->required('id')->integer();
    14. return new $v->validate($this->values());
    15. }
    16. protected function values()
    17. {
    18. return [
    19. 'id' => $this->id,
    20. ];
    21. }
    22. }
    23. // in a controller:
    24. $entity = new Entity();
    25. $entity->setId($this->getParam('id'));
    26. $result = $entity->validate();
    27. if (!$result->isValid()) {
    28. return $this->renderTemplate([
    29. 'messages' => $result->getMessages() // or maybe even just pass in $result.
    30. ]);
    31. }

http://validator.particle-php.com/en/latest/

转载于:https://www.cnblogs.com/qinsilandiao/p/10871617.html

 类似资料: