PHPackages                             snow/validation - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Validation &amp; Sanitization](/categories/validation)
4. /
5. snow/validation

ActiveLibrary[Validation &amp; Sanitization](/categories/validation)

snow/validation
===============

validation is a validate library

v1.0.0(5y ago)17PHPPHP &gt;=7.0

Since Aug 9Pushed 5y ago1 watchersCompare

[ Source](https://github.com/zhaoyang1214/validation)[ Packagist](https://packagist.org/packages/snow/validation)[ RSS](/packages/snow-validation/feed)WikiDiscussions master Synced 1w ago

READMEChangelogDependencies (1)Versions (3)Used By (0)

这是一个验证类
=======

[](#这是一个验证类)

安装
--

[](#安装)

#### 使用composer安装

[](#使用composer安装)

```
composer require snow/validation

```

一、使用
----

[](#一使用)

1、简单使用

```
use Snow\Validation\Validation;
use Snow\Validation\Validation\Validator\Alnum;

$validation = new Validation();
$validation->add('username', new Alnum());

$messages = $validation->validate([
    'username' => 'saas2;:sssaa'
]);

if (count($messages)) {
    foreach ($messages as $msg) {
        echo $msg, PHP_EOL;// username必须只包含字母和数字
        // echo $msg->getMessage(); // username必须只包含字母和数字
    }
}
```

**最新支持多维数组验证**

```
use Snow\Validation\Validation;
use Snow\Validation\Validation\Validator\Alnum;

$validation = new Validation();
$validation->add('statistics.send.total_clicks', new Alnum([
    Alnum::OPT_MESSAGE => '统计点击数必须只包含字母和数字'
]));

/*$validation->add([
    'statistics.send.total_clicks',
    'statistics.send.total_exposure',
], new Alnum([
    Alnum::OPT_MESSAGE => [
        'statistics.send.total_clicks' => '统计点击数必须只包含字母和数字',
        'statistics.send.total_exposure' => '统计曝光必须只包含字母和数字',
    ]
]));*/

$messages = $validation->validate([
    'statistics' => [
        'send' => [
            'total_clicks' => 'aaa--',
            'total_exposure' => 'bbb'
        ]
    ]
]);

if (count($messages)) {
    foreach ($messages as $msg) {
         echo $msg->getMessage(); // 统计点击数必须只包含字母和数字
    }
}
```

2、定制提示信息

```
use Snow\Validation\Validation;
use Snow\Validation\Validation\Validator\Alnum;

$validation = new Validation();
$validation->add('username', new Alnum([
    'message' => '字段:field必须只包含字母和数字'
]));

$group = $validation->validate([
    'username' => 'saas2;:s--'
]);
foreach ($group as $msg) {
    echo $msg; // 字段username必须只包含字母和数字
}
```

3、给字段设置标签

```
use Snow\Validation\Validation;
use Snow\Validation\Validation\Validator\Alnum;

$validation = new Validation();
$validation->add('username', new Alnum([
    'message' => ':field必须只包含字母和数字',
    'label' => '用户名',
]));

$group = $validation->validate([
    'username' => 'saas2;:s--'
]);
foreach ($group as $msg) {
    echo $msg, PHP_EOL; // 用户名必须只包含字母和数字
}
```

4、给多个字段批量设置验证规则

```
use Snow\Validation\Validation;
use Snow\Validation\Validation\Validator\Alnum;

$validation = new Validation();
$validation->add([
    'username',
    'name',
], new Alnum([
    'message' => [
        'username' => '字段1:field必须只包含字母和数字',
        'name' => '字段2:field必须只包含字母和数字',
    ]
]));

$group = $validation->validate([
    'username' => 'saas2;:s--',
    'name' => 'test--',
]);
foreach ($group as $msg) {
    echo $msg, PHP_EOL;
    // 字段1username必须只包含字母和数字
    // 字段2name必须只包含字母和数字
}
```

5、设置允许字段为空值

```
use Snow\Validation\Validation;
use Snow\Validation\Validation\Validator\Alnum;

$validation = new Validation();
$validation->add([
    'username',
    'name',
], new Alnum([
    'message' => [
        'username' => '字段1:field必须只包含字母和数字',
        'name' => '字段2:field必须只包含字母和数字',
    ],
    'allowEmpty' => true,
]));

$group = $validation->validate([
    'username' => 'saas2;:s--'
]);
foreach ($group as $msg) {
    echo $msg, PHP_EOL; // 字段1username必须只包含字母和数字
}

// 亦可指定空值
$validation = new Validation();
$validation->add([
    'username',
    'name',
], new Alnum([
    'message' => [
        'username' => '字段1:field必须只包含字母和数字',
        'name' => '字段2:field必须只包含字母和数字',
    ],
    // 指定空值
    'allowEmpty' => [0, false],
]));

$group = $validation->validate([
    'username' => 'saas2;:s--'
]);
foreach ($group as $msg) {
    echo $msg, PHP_EOL;
    // 字段1username必须只包含字母和数字
    // 字段2name必须只包含字母和数字
}
```

6、验证失败后取消验证（不再继续验证）

```
use Snow\Validation\Validation;
use Snow\Validation\Validation\Validator\Alnum;

$validation = new Validation();
$validation->add([
    'username',
    'name',
], new Alnum([
    'message' => [
        'username' => '字段1:field必须只包含字母和数字',
        'name' => '字段2:field必须只包含字母和数字',
    ],
    'cancelOnFail' => true
]));

$group = $validation->validate([
    'username' => 'saas2;:s--'
]);

foreach ($group as $msg) {
    echo $msg, PHP_EOL;
    // 字段1username必须只包含字母和数字
}
```

7、给字段批量设置验证器

```
use Snow\Validation\Validation;
use Snow\Validation\Validation\Validator\Alnum;
use Snow\Validation\Validation\Validator\Alpha;

$validation = new Validation();
$validation->rules('username', [
    new Alnum(),
    new Alpha(),
]);

$group = $validation->validate(['username' => 'saas2;:s--']);

foreach ($group as $msg) {
    echo $msg, PHP_EOL;
    // username必须只包含字母和数字
    // username 必须只包含字母
}
```

8、给多个字段批量设置验证器，并根据字段名过滤消息

```
use Snow\Validation\Validation;
use Snow\Validation\Validation\Validator\Alnum;
use Snow\Validation\Validation\Validator\Alpha;

$validation = new Validation();
// 设置默认提示
$validation->setDefaultMessages([
    Alnum::TYPE => ':field 只能为字母与数字',
    Alpha::TYPE => ':field 只能为字母',
]);
// 生成四条验证
$validation->rules([
    'username',
    'name',
], [
    new Alnum([
        'message' => [
            'username' => '用户名必须只包含字母和数字（我的优先级比较高）',
            'name' => '姓名必须只包含字母和数字（我的优先级比较高）',
        ]
    ]),
    new Alpha(),
]);

// 也可以这么写
/*$validation->rules([
    'username',
    'name',
], [
    new Alnum([
        'message' => ':field必须只包含字母和数字（我的优先级比较高）'
    ]),
    new Alpha(),
]);*/

$group = $validation->validate([
    'username' => 'saas2;:s--'
]);

foreach ($group as $msg) {
    echo $msg, PHP_EOL;
    // 用户名必须只包含字母和数字（我的优先级比较高）
    // 姓名必须只包含字母和数字（我的优先级比较高）
    // username 只能为字母
    // name 只能为字母
}

// 根据字段过滤消息
$messages = $group->filter('name');
foreach ($messages as $msg) {
    echo $msg, PHP_EOL;
}
```

二、定制验证类
-------

[](#二定制验证类)

通过继承`Snow\Validation\Validation`类可创建一些验证类重复使用，类支持三个事件`initialize`、`beforeValidate`、`afterValidate`，分别是初始化、 验证之前、验证之后触发。需要注意的是当`beforeValidate`返回`false`时将不会验证数据

例如用户注册时需要验证，可以实现一个用户验证类

```
namespace Test;

use Snow\Validation\Validation;
use Snow\Validation\Validation\Validator\Alnum;
use Snow\Validation\Validation\Validator\Alpha;
use Snow\Validation\Validation\Message;

class UserValidation extends Validation
{
    /**
     * 实例化时调用
     */
    public function initialize()
    {
//        $this->setDefaultMessages([
//            Alnum::TYPE => ':field 只能为字母与数字',
//            Alpha::TYPE => ':field 只能为字母',
//        ]);
        // 添加验证规则
        $this->add('username', new Alnum())
            ->add('name', new Alpha());
    }

    /**
     * 功能：验证之前调用，失败则取消验证
     * 修改日期：2019/8/13
     *
     * @param array|object $data 待验证数据
     * @param \Snow\Validation\Validation\Group $messages 验证消息
     * @return bool
     */
    public function beforeValidate($data, $messages)
    {
        if ($data['username'] == 'admin') {
            $messages->appendMessage(
                new Message('不允许注册admin')
            );
            return false;
        }
        return true;
    }

    /**
     * 功能：验证之后调用
     * 修改日期：2019/8/13
     *
     * @param array|object $data 待验证数据
     * @param \Snow\Validation\Validation\Group $messages 验证消息
     * @return void|mixed
     */
    public function afterValidate($data, $messages)
    {
    }
}

// 使用
$userValidation = new UserValidation();
$group = $userValidation->validate([
    'username' => 'admin'
]);

// beforeValidate返回false时validate才会返回false,其他场景下均返回\Snow\Validation\Validation\Group
// 如果没有自定义beforeValidate方法，或beforeValidate方法返回非false,可直接用count($group)来判断验证是否通过
if ($group === false) {
    $group = $userValidation->getMessages();
}
foreach ($group as $msg) {
    echo $msg; // 不允许注册admin
}
```

如果上面`UserValidation`类没有自定义`beforeValidate`方法,则可以直接使用下面写法判断是否验证成功：

```
if (count($group)) {
    // 失败
    echo $group[0]->getMessage(); // 第一条错误消息
}
```

三、所有验证器
-------

[](#三所有验证器)

验证器功能是否是多字段是否已实现\\Snow\\Validation\\Validation\\Validator\\Alnum检查字母数字字符否是\\Snow\\Validation\\Validation\\Validator\\Alpha检查字母字符否是\\Snow\\Validation\\Validation\\Validator\\Between验证值位于两个值之间
对于值x，如果minimum&lt;=x&lt;=maximum，则通过否是\\Snow\\Validation\\Validation\\Validator\\Callback调用用户函数进行验证否是\\Snow\\Validation\\Validation\\Validator\\Confirmation检查两个值是否相同否是\\Snow\\Validation\\Validation\\Validator\\CreditCard检查信用卡号码是否有效否是\\Snow\\Validation\\Validation\\Validator\\Date检查值是否为有效日期否是\\Snow\\Validation\\Validation\\Validator\\Digit检查数字字符（纯数字）否是\\Snow\\Validation\\Validation\\Validator\\Email检查值是否具有正确的e-mail格式否是\\Snow\\Validation\\Validation\\Validator\\ExclusionIn检查值是否不包含在值列表中否是\\Snow\\Validation\\Validation\\Validator\\File检查值是否具有正确的文件
包括不限于文件大小、文件类型等否是\\Snow\\Validation\\Validation\\Validator\\IDCard检查18位身份证号码是否正确否是\\Snow\\Validation\\Validation\\Validator\\Identical检查值是否与其他值相同否是\\Snow\\Validation\\Validation\\Validator\\InclusionIn检查值是否包含在值列表中否是\\Snow\\Validation\\Validation\\Validator\\Numericality检查是否是有效的数值否是\\Snow\\Validation\\Validation\\Validator\\PresenceOf验证字段的值不是null、空字符串或空数组否是\\Snow\\Validation\\Validation\\Validator\\Regex检查值是否匹配正则表达式否是\\Snow\\Validation\\Validation\\Validator\\StringLength验证字符串的长度范围否是\\Snow\\Validation\\Validation\\Validator\\Uniqueness验证字段的值是否唯一是是\\Snow\\Validation\\Validation\\Validator\\Url检查值是否具有url格式否是\\Snow\\Validation\\Validation\\Validator\\Phone检查值是否具有手机号码格式否是\\Snow\\Validation\\Validation\\Validator\\Json检查值是否具有Json格式否是\\Snow\\Validation\\Validation\\Validator\\Base64检查值是否具有Base64格式否是\\Snow\\Validation\\Validation\\Validator\\Ip检查值是否是合法Ip否是四、选项参数
------

[](#四选项参数)

##### 1、公共选项参数

[](#1公共选项参数)

类常量参数默认值注释是否必须OPT\_MESSAGEmessage-提示信息否OPT\_LABELlabel字段名字段标签否OPT\_CODEcode0消息码否OPT\_ALLOW\_EMPTYallowEmptyfalse是否允许为空否OPT\_CANCEL\_ON\_FAILcancelOnFailfalse验证失败后是否继续验证否##### 2、其他特殊验证器选项参数

[](#2其他特殊验证器选项参数)

- 验证器`\Snow\Validation\Validation\Validator\Between`选项

类常量参数默认值注释是否必须OPT\_MINIMUMminimum-最小值是OPT\_MAXIMUMmaximum-最大值是**使用：**```
use Snow\Validation\Validation;
use Snow\Validation\Validation\Validator\Between;

$validation = new Validation();
$validation->add('age', new Between([
    Between::OPT_MAXIMUM => 90,
    Between::OPT_MINIMUM => 10,
    Between::OPT_MESSAGE => ':field 必须在:minimum到:maximum之间', // 非必须
]));

$group = $validation->validate([
    'age' => 9
]);
foreach ($group as $msg) {
    echo $msg->getMessage(), PHP_EOL;
}
```

- 验证器`\Snow\Validation\Validation\Validator\Callback`选项

类常量参数默认值注释是否必须OPT\_CALLBACKcallback-回调函数是**使用（支持call\_user\_func函数所有用法）：****用法1:**

```
use Snow\Validation\Validation;
use Snow\Validation\Validation\Validator\Callback;
use Snow\Validation\Validation\Validator\Alnum;

$validation = new Validation();
$validation->add('username', new Callback([
    Callback::OPT_CALLBACK => function ($data) {
        if ($data['username'] == 'admin') {
            return false;
        }
        return new Alnum();
    }
]));

$group = $validation->validate([
    'username' => 'saas2;:s--'
]);
foreach ($group as $msg) {
    echo $msg, PHP_EOL; // username必须只包含字母和数字
}
```

**用法2:**

```
// 定义验证函数
function checkUsername($data)
{
    return $data['username'] == 'admin' ? false : true;
}

// 使用
use Snow\Validation\Validation;
use Snow\Validation\Validation\Validator\Callback;

$validation = new Validation();
$validation->add('username', new Callback([
    Callback::OPT_CALLBACK => 'checkUsername'
]));

$group = $validation->validate([
    'username' => 'admin'
]);
foreach ($group as $msg) {
    echo $msg, PHP_EOL; // username验证失败
}
```

- 验证器`\Snow\Validation\Validation\Validator\Confirmation`选项

类常量参数默认值注释是否必须OPT\_WITHwith-要比较的字段名是OPT\_LABEL\_WITHlabelWith选项with的值要比较的字段的标签否OPT\_IGNORE\_CASEignoreCasefalse忽略大小写否**使用：**```
use Snow\Validation\Validation;
use Snow\Validation\Validation\Validator\Confirmation;

$validation = new Validation();
$validation->add('password', new Confirmation([
    Confirmation::OPT_WITH => 'confirmPassword',
    Confirmation::OPT_LABEL => '密码',
    Confirmation::OPT_LABEL_WITH => '确认密码',
]));

$group = $validation->validate([
    'password' => 'admin123',
    'confirmPassword' => 'Admin123',
]);
foreach ($group as $msg) {
    echo $msg, PHP_EOL; // 密码与确认密码必须相同
}
```

- 验证器`\Snow\Validation\Validation\Validator\Date`选项

类常量参数默认值注释是否必须OPT\_FORMATformatY-m-d日期格式否**使用：**```
use Snow\Validation\Validation;
use Snow\Validation\Validation\Validator\Date;

$validation = new Validation();
$validation->add('strat_time', new Date([
    Date::OPT_FORMAT => 'Y-m-d H:i:s'
]));

$group = $validation->validate([
    'strat_time' => '2019-12-30'
]);

foreach ($group as $msg) {
    echo $msg, PHP_EOL; // strat_time不是有效的日期
}
```

- 验证器`\Snow\Validation\Validation\Validator\ExclusionIn`选项

类常量参数默认值注释是否必须OPT\_DOMAINdomain-值范围是OPT\_STRICTstrictfalse是否严格校验否**用法1:**

```
use Snow\Validation\Validation;
use Snow\Validation\Validation\Validator\ExclusionIn;

$validation = new Validation();
$validation->add(['hobbies', 'status'], new ExclusionIn([
    ExclusionIn::OPT_DOMAIN => [
        'hobbies' => ['足球', '篮球', '羽毛球', '乒乓球'],
        'status' => [0, 1, 2],
    ]
]));

$group = $validation->validate([
    'hobbies' => '乒乓球',
    'status' => '0'
]);

foreach ($group as $msg) {
    echo $msg, PHP_EOL; // hobbies必须不能在足球,篮球,羽毛球,乒乓球范围内
                        // status必须不能在0,1,2范围内
}
```

**用法2:**

```
use Snow\Validation\Validation;
use Snow\Validation\Validation\Validator\ExclusionIn;

$validation = new Validation();
$validation->add(['status', 'type'], new ExclusionIn([
    ExclusionIn::OPT_DOMAIN => [0, 1, 2],
    ExclusionIn::OPT_STRICT => true,
]));

$group = $validation->validate([
    'status' => '0',
    'type' => 0,
]);

foreach ($group as $msg) {
    echo $msg, PHP_EOL; // type必须不能在0,1,2范围内
}
```

- 验证器`\Snow\Validation\Validation\Validator\Identical`选项

类常量参数默认值注释是否必须OPT\_ACCEPTEDaccepted-服务条款accepted与value至少设置一个OPT\_VALUEvalue-比较值accepted与value至少设置一个**使用：**```
use Snow\Validation\Validation;
use Snow\Validation\Validation\Validator\Identical;

$validation = new Validation();
$validation->add('terms', new Identical([
    Identical::OPT_ACCEPTED => 'yes'
]));

$group = $validation->validate([
    'terms' => 'no',
]);

foreach ($group as $msg) {
    echo $msg, PHP_EOL; // terms必须为yes
}
```

- 验证器`\Snow\Validation\Validation\Validator\InclusionIn`选项

类常量参数默认值注释是否必须OPT\_DOMAINdomain-值范围是OPT\_STRICTstrictfalse是否严格校验否**使用：**```
use Snow\Validation\Validation;
use Snow\Validation\Validation\Validator\InclusionIn;

$validation = new Validation();
$validation->add('type', new InclusionIn([
    InclusionIn::OPT_DOMAIN => [1, 2, 3]
]));

$group = $validation->validate([
    'type' => 4,
]);

foreach ($group as $msg) {
    echo $msg, PHP_EOL; // type必须在1,2,3范围内
}
```

- 验证器`\Snow\Validation\Validation\Validator\Regex`选项

类常量参数默认值注释是否必须OPT\_PATTERNpattern-正则表达式是**使用：**```
use Snow\Validation\Validation;
use Snow\Validation\Validation\Validator\Regex;

$validation = new Validation();
$validation->add('phone', new Regex([
    Regex::OPT_PATTERN => '/^1[3-9]\d{9}$/'
]));

$group = $validation->validate([
    'phone' => '123456789',
]);

foreach ($group as $msg) {
    echo $msg, PHP_EOL; // phone匹配失败
}
```

- 验证器`\Snow\Validation\Validation\Validator\StringLength`选项

类常量参数默认值注释是否必须OPT\_MINmin-最小值选项min、max、equal最少设置一个OPT\_MESSAGE\_MINmessageMin-字符串长度最小值错误提示信息否OPT\_INCLUDE\_MINincludedMintrue字符串长度最小值范围是否包含最小值否OPT\_MAXmax-最大值选项同min选项OPT\_MESSAGE\_MAXmessageMax-字符串长度最大值错误提示信息否OPT\_INCLUDE\_MAXincludedMaxtrue字符串长度最大值范围是否包含最大值否OPT\_EQUALequal-字符串长度相等值同min选项OPT\_MESSAGE\_EQUALmessageEqual-字符串长度相等值错误提示信息否**用法1:**

```
use Snow\Validation\Validation;
use Snow\Validation\Validation\Validator\StringLength;

$validation = new Validation();
$validation->add('name', new StringLength([
    StringLength::OPT_MAX => 10,
]));

$group = $validation->validate([
    'name' => 'adminadminadmin',
]);

foreach ($group as $msg) {
    echo $msg, PHP_EOL; // name长度不能超过10个字符
}
```

**用法2:**

```
use Snow\Validation\Validation;
use Snow\Validation\Validation\Validator\StringLength;

$validation = new Validation();
$validation->add('name', new StringLength([
    StringLength::OPT_MIN => 5,
    StringLength::OPT_MAX => 10,
    StringLength::OPT_MESSAGE_MAX => ':field最大长度为:length',
]));

$group = $validation->validate([
    'name' => 'adminadminadmin',
]);

foreach ($group as $msg) {
    echo $msg, PHP_EOL; // name最大长度为10
}
```

**用法3:**

```
use Snow\Validation\Validation;
use Snow\Validation\Validation\Validator\StringLength;

$validation = new Validation();
$validation->add(['name', 'username'], new StringLength([
    StringLength::OPT_MIN => 5,
    StringLength::OPT_MAX => [
        'name' => 10,
        'username' => 20,
    ],
    StringLength::OPT_MESSAGE_MIN => [
        'name' => '姓名最小长度为:length',
        'username' => '用户名最小长度为:length',
    ],
    StringLength::OPT_MESSAGE_MAX =>':field最大长度为:length',
]));

$group = $validation->validate([
    'name' => 'adminadminadmin',
    'username' => 'adm',
]);

foreach ($group as $msg) {
    echo $msg, PHP_EOL; // name最大长度为10
                        // 用户名最小长度为5
}
```

- 验证器`\Snow\Validation\Validation\Validator\Uniqueness`选项

类常量参数默认值注释是否必须OPT\_MODELmodel-模型是OPT\_METHODmethodisUniqueness验证方法否OPT\_ATTRIBUTEattribute-字段映射否OPT\_CONVERTconvert-数据转换处理否**用法1:**

```
class Model
{
    /**
     * 功能：验证唯一值(默认)
     * 修改日期：2019/8/27
     *
     * @param array $data 数据
     * @param array $filed 字段
     * @return bool
     */
    public function isUniqueness($data, $filed)
    {
        return false;
    }

    /**
     * 功能：验证唯一值（需指定）
     * 修改日期：2019/8/27
     *
     * @param array $data 数据
     * @param array $filed 字段
     * @return bool
     */
    public function isUniqueness2($data, $filed)
    {
        return false;
    }
}

// 使用
use Snow\Validation\Validation;
use Snow\Validation\Validation\Validator\Uniqueness;

$validation = new Validation();
$validation->add('name', new Uniqueness([
    'model' => new Model(),
]));

$group = $validation->validate([
    'name' => 'admin'
]);

foreach ($group as $msg) {
    echo $msg, PHP_EOL; // name已存在
}
```

**用法2:**

```
use Snow\Validation\Validation;
use Snow\Validation\Validation\Validator\Uniqueness;

$validation = new Validation();
$validation->add(['name', 'status'], new Uniqueness([
    Uniqueness::OPT_MODEL => new Model(),
    Uniqueness::OPT_METHOD => 'isUniqueness2', // 非必须，当Model中无isUniqueness方法时，需指定方法
    Uniqueness::OPT_ATTRIBUTE => [
        'name' => 'username'
    ],
    Uniqueness::OPT_CONVERT => function ($data) {
        if (isset($data['name'])) {
            $data['name'] = ucfirst($data['name']);
        }
        return $data;
    }
]));

$group = $validation->validate([
    'name' => 'admin',
    'status' => 0,
]);

foreach ($group as $msg) {
    echo $msg, PHP_EOL; // name,status已存在
}
```

- 验证器`\Snow\Validation\Validation\Validator\File`选项

类常量参数默认值注释是否必须OPT\_ALLOW\_TYPESallowedTypes-允许的文件类型minSize、maxSize、equalSize、
minResolution、maxResolution、equalResolution、
allowedTypes最少设置一个OPT\_MESSAGE\_TYPEmessageType-类型错误提示信息否OPT\_MIN\_SIZEminSize-文件大小最小值同allowedTypes选项OPT\_MESSAGE\_MIN\_SIZEmessageMinSize-文件大小最小值错误提示信息否OPT\_INCLUDE\_MIN\_SIZEincludedMinSizetrue文件大小最小值范围是否包含最小值否OPT\_MAX\_SIZEmaxSize-文件大小最大值同allowedTypes选项OPT\_MESSAGE\_MAX\_SIZEmessageMaxSize-文件大小最大值错误提示信息否OPT\_INCLUDE\_MAX\_SIZEincludedMaxSizetrue文件大小最大值范围是否包含最大值否OPT\_EQUAL\_SIZEequalSize-文件大小值同allowedTypes选项OPT\_MESSAGE\_EQUAL\_SIZEmessageEqualSize-文件大小值错误提示信息否OPT\_MIN\_RESOLUTIONminResolution-文件分辨率最小值同allowedTypes选项OPT\_MESSAGE\_MIN\_RESOLUTIONmessageMinResolution-文件分辨率最小值错误提示信息否OPT\_INCLUDE\_MIN\_RESOLUTIONincludedMinResolutiontrue文件分辨率最小值范围是否包含最小值否OPT\_MAX\_RESOLUTIONmaxResolution-文件分辨率最大值同allowedTypes选项OPT\_MESSAGE\_MAX\_RESOLUTIONmessageMaxResolution-文件分辨率最大值错误提示信息否OPT\_INCLUDE\_MAX\_RESOLUTIONincludedMaxResolutiontrue文件分辨率最大值范围是否包含最大值否OPT\_EQUAL\_RESOLUTIONequalResolution-文件分辨率值同allowedTypes选项OPT\_MESSAGE\_EQUAL\_RESOLUTIONmessageEqualResolution-文件分辨率值错误提示信息否**用法1:**

```
use Snow\Validation\Validation;
use Snow\Validation\Validation\Validator\File;

$validation = new Validation();
$validation->add('image', new File([
    File::OPT_ALLOW_TYPES => ['image/jpeg'],
]));

$group = $validation->validate($_FILES);

foreach ($group as $msg) {
    echo $msg, ''; // image的文件类型必须为image/jpeg
}
```

**用法2:**

```
use Snow\Validation\Validation;
use Snow\Validation\Validation\Validator\File;

$validation = new Validation();
$validation->add('image', new File([
    File::OPT_MIN_SIZE => '3M',
    File::OPT_INCLUDE_MIN_SIZE => false,
    File::OPT_MESSAGE_MIN_SIZE => '图片最小为:size',
]));

$group = $validation->validate($_FILES);

foreach ($group as $msg) {
    echo $msg, ''; // 图片最小为3M
}
```

**用法3:**

```
use Snow\Validation\Validation;
use Snow\Validation\Validation\Validator\File;

$validation = new Validation();
$validation->add('image', new File([
    File::OPT_MAX_SIZE => '100KB',
]));

$group = $validation->validate($_FILES);

foreach ($group as $msg) {
    echo $msg, ''; // image的文件大小不能大于100KB
}
```

**用法4:**

```
use Snow\Validation\Validation;
use Snow\Validation\Validation\Validator\File;

$validation = new Validation();
$validation->add('image', new File([
    File::OPT_MIN_RESOLUTION => '953x592',
]));

$group = $validation->validate($_FILES);

foreach ($group as $msg) {
    echo $msg, ''; // image的图像分辨率不能小于953x592
}
```

- 验证器`\Snow\Validation\Validation\Validator\Ip`选项

类常量参数默认值注释是否必须OPT\_VERSIONversionFILTER\_FLAG\_IPV4 | FILTER\_FLAG\_IPV6ip地址格式否OPT\_ALLOW\_PRIVATEallowPrivatefalse要求值是 RFC 指定的私域 IP否OPT\_ALLOW\_RESERVEDallowPrivatefalse要求值不在保留的 IP 范围内否**使用：**```
use Snow\Validation\Validation;
use Snow\Validation\Validation\Validator\InclusionIn;

$validation = new Validation();
$validation->add('ip', new Ip());

$group = $validation->validate([
    'ip' => '3..115.201.2'
]);

foreach ($group as $msg) {
    echo $msg, PHP_EOL; // ip必须是有效的IP地址
}
```

###  Health Score

23

—

LowBetter than 27% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity6

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity51

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

2

Last Release

2108d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/22496108?v=4)[赵阳](/maintainers/zhaoyang1214)[@zhaoyang1214](https://github.com/zhaoyang1214)

---

Top Contributors

[![zhaoyang1214](https://avatars.githubusercontent.com/u/22496108?v=4)](https://github.com/zhaoyang1214 "zhaoyang1214 (1 commits)")

---

Tags

validationvalidate

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/snow-validation/health.svg)

```
[![Health](https://phpackages.com/badges/snow-validation/health.svg)](https://phpackages.com/packages/snow-validation)
```

###  Alternatives

[wixel/gump

A fast, extensible &amp; stand-alone PHP input validation class that allows you to validate any data.

1.2k1.3M30](/packages/wixel-gump)[inhere/php-validate

generic data validate, filter library of the php

26787.4k13](/packages/inhere-php-validate)[sadegh19b/laravel-persian-validation

A comprehensive Laravel validation package for Persian text, numbers, dates, and Iranian national identifiers

18293.8k1](/packages/sadegh19b-laravel-persian-validation)[awurth/slim-validation

A wrapper around the respect/validation PHP validation library for easier error handling and display

65378.4k9](/packages/awurth-slim-validation)[bartosz-maciaszek/validation

Validation library for PHP 5.6+ / HHVM inspired by Joi.

3223.3k](/packages/bartosz-maciaszek-validation)[czim/laravel-dataobject

Basic validatable standardized data object.

11137.7k7](/packages/czim-laravel-dataobject)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
