diff --git a/README.md b/README.md index cb47b2c998ee5305cbebbdb47b47bc129b06cf42..d7cb5b95b019f9660b572cf092f5d67187790840 100644 --- a/README.md +++ b/README.md @@ -1,255 +1,230 @@ -

微梦表单验证

+# Validate -

-Star -Fork -

+[![Build Status](https://travis-ci.org/itwmw/validate.php.svg?branch=master)](https://travis-ci.org/itwmw/validate.php) -

-Latest Stable Version -Tests -License -PHP Version Require -

+一个灵活且强大的 PHP 数据验证库,支持多种验证规则、场景验证、自定义规则、预处理和后处理等功能。 -中文 | -[English](https://gitee.com/yepyuyu/wm-validate/blob/6.x/README-EN.md) +## 目录 -## 介绍 -一个让你的表单验证更为方便,快捷,安全的扩展,满足你的一切验证需求。 +- [安装](#安装) +- [简单验证](#简单验证) +- [验证器定义](#验证器定义) +- [数据验证](#数据验证) +- [验证数组](#验证数组) +- [验证器类属性](#验证器类属性) +- [规则定义 `$rule`](#规则定义-rule) +- [自定义错误消息 `$message`](#自定义错误消息-message) +- [验证场景 `$scene`](#验证场景-scene) +- [事件 `$event`](#事件-event) +- [预处理器 `$preprocessor`](#预处理器-preprocessor) +- [后处理器 `$postprocessor`](#后处理器-postprocessor) +- [自定义属性 `$customAttributes`](#自定义属性-customattributes) +- [规则消息映射 `$ruleMessage`](#规则消息映射-rulemessage) +- [正则表达式验证 `$regex`](#正则表达式验证-regex) +- [规则组 `$group`](#规则组-group) +## 安装 -## 目录 -- [验证器](https://v.itwmw.com/6/Validate.html) -- [验证场景](https://v.itwmw.com/6/Scene.html) -- [场景事件](https://v.itwmw.com/6/Event.html) -- [内置规则](https://v.itwmw.com/6/BuiltRule.html) -- [自定义验证规则](https://v.itwmw.com/6/Rule.html) -- [规则参数解析器](https://v.itwmw.com/6/RuleParamsParser.html) -- [自定义消息](https://v.itwmw.com/6/Message.html) -- [数据处理器](https://v.itwmw.com/6/Processor.html) -- [验证集合](https://v.itwmw.com/6/Collection.html) +使用 Composer 安装: -## 安装 -使用composer命令 -``` shell +```bash composer require itwmw/validate ``` -完整文档查看[完整文档](https://v.itwmw.com) - ## 简单验证 -支持简单定义一个验证器并进行验证: + ```php -try { - $data = Validate::make([ - 'user' => 'required|email', - 'pass' => 'required|lengthBetween:6,16', - ], [ - 'user.required' => '请输入用户名', - 'user.email' => '用户名格式错误', - 'pass.required' => '请输入密码', - 'pass.lengthBetween' => '密码长度为6~16位', - ])->check($data); -} catch (ValidateException $e) { - echo $e->getMessage(); +use Itwmw\Validate\Validate; + +$data = [ + 'name' => 'John Doe', + 'email' => 'john@example.com' +]; + +$rules = [ + 'name' => 'required|string|min:3', + 'email' => 'required|email' +]; + +$validator = Validate::make($rules); +$result = $validator->check($data); + +if ($result->isSuccess()) { + echo "验证通过"; +} else { + print_r($result->getErrors()); } ``` -如果验证通过,则返回所有通过验证的值,如未通过,则抛出一个`Itwmw\Validate\Exception\ValidateException`异常 ## 验证器定义 -为具体的验证场景或者数据表单定义验证器类,我们需要继承`Itwmw\Validate\Validate`类,然后实例化后直接调用验证类的`check`方法即可完成验证,下面是一个例子: -我们定义一个`LoginValidate`验证器类用于登录的验证。 +你可以通过继承 `Validate` 类来定义自己的验证器: + ```php -class LoginValidate extends Validate +use Itwmw\Validate\Validate; + +class UserValidate extends Validate { protected $rule = [ - 'user' => 'required|email', - 'pass' => 'required|digits_between:6,16', + 'name' => 'required|string|min:3', + 'email' => 'required|email' ]; - + protected $message = [ - 'user.required' => '请输入用户名', - 'user.email' => '用户名格式错误', - 'pass.required' => '请输入密码', - 'pass.digits_between' => '密码长度为6~16位', + 'name.required' => '名称必须填写', + 'email.email' => '邮箱格式不正确' ]; } - ``` ->
类属性定义的错误消息,优先级要高于自定义规则中的默认回复,高于自定义规则方法返回的错误
- ## 数据验证 -``` php -$data = [ - 'user' => '123@qq.com', - 'pass' => '' -]; -$validate = new LoginValidate(); -$validate->check($data); -``` -此时会抛出一个`Itwmw\Validate\Exception\ValidateException`异常,message为`请输入密码` -``` php -$data = [ - 'user' => '123@qq.com', - 'pass' => '123456' -]; -$validate = new LoginValidate(); -$data = $validate->check($data); + +使用 `check` 方法进行数据验证: + +```php +$validator = new UserValidate(); +$result = $validator->check($_POST); + +if ($result->isSuccess()) { + // 验证通过 +} else { + // 验证失败,输出错误信息 + print_r($result->getErrors()); +} ``` -验证成功,并返回通过验证的值,返回的值为数组类型 ## 验证数组 -验证表单的输入为数组的字段也不难。你可以使用 「点」方法来验证数组中的属性。例如,如果传入的 HTTP 请求中包含`search[keyword]`字段, 可以如下验证: -``` php -protected $rule = [ - 'search.order' => 'numeric|between:1,2', - 'search.keyword' => 'chsAlphaNum', - 'search.recycle' => 'boolean', -]; -``` -你也可以验证数组中的每个元素。例如,要验证指定数组输入字段中的每一个 id 是唯一的,可以这么做: -``` php -protected $rule = [ - 'search.*.id' => 'numeric|unique:account' -]; -``` -数组规则的错误消息的定义也一样 -``` php -protected $message = [ - 'search.order.numeric' => '排序参数错误', - 'search.order.between' => '排序参数错误', - 'search.keyword.chsAlphaNum' => '关键词只能包含中文,字母,数字', - 'search.recycle.boolean' => '参数错误:recycle', + +支持对数组进行验证: + +```php +$rules = [ + 'users.*.name' => 'required|string|min:3', + 'users.*.age' => 'required|integer|min:18' ]; + +$validator = Validate::make($rules); +$result = $validator->check($data); ``` + ## 验证器类属性 -### $rule -用户定义验证器的验证规则,也可以通过`setRules`方法来进行设置,此方法为叠加,如果参数为`null`则为清空全部规则 + +### 规则定义 `$rule` + +定义验证规则: + ```php -// 类中定义 protected $rule = [ - 'user' => 'required' + 'name' => 'required|string|min:3', + 'email' => 'required|email' ]; - -// 使用方法定义 -$v->setRules([ - 'user' => 'required' -]); ``` -### $message -用户定义验证器的错误信息,也可以通过`setMessages`方法来进行设置,此方法为叠加,如果参数为`null`则为清空全部错误消息 +### 自定义错误消息 `$message` + +自定义错误消息: + ```php -// 类中定义 protected $message = [ - 'user.required' => '账号必须填写' + 'name.required' => '名称必须填写', + 'email.email' => '邮箱格式不正确' ]; - -// 使用方法定义 -$v->setMessages([ - 'user.required' => '账号必须填写' -]); ``` -更多用法可以查看[错误消息](https://v.itwmw.com/6/Message.html)一节 -### $scene -定义验证场景的数据,用于指定验证场景对应的验证字段等,详细用法查看[验证场景](https://v.itwmw.com/6/Scene.html)一节,同样也可以通过`setScene`方法来进行设置,此方法为叠加,如果参数为`null`则为清空全部验证场景 +### 验证场景 `$scene` + +定义验证场景: + ```php -// 类中定义 protected $scene = [ - 'login' => ['user', 'pass'] + 'login' => ['name', 'password'], + 'register' => ['name', 'email', 'password'] ]; - -// 使用方法定义 -$v->setScene([ - 'login' => ['user', 'pass'] -]); ``` -### $event -定义此验证器下的全局事件,详细用法查看[事件](https://v.itwmw.com/6/Event.html)一节 +### 事件 `$event` + +定义验证前后触发的事件: + ```php protected $event = [ - CheckSiteStatus::class + 'before' => 'beforeValidate', + 'after' => 'afterValidate' ]; -``` -### $customAttributes -定义验证字段的名称,也可以通过`setCustomAttributes`方法来进行设置,此方法为叠加,如果参数为`null`则为清空全部字段名称, -错误消息中的[:attribute](https://v.itwmw.com/6/Message.html#attribute)会使用下面的值对应的替换 -```php -protected $customAttributes = [ - 'user' => '账号', - 'pass' => '密码' -]; +public function beforeValidate() +{ + // 验证前操作 +} + +public function afterValidate() +{ + // 验证后操作 +} ``` -### $preprocess -为字段定义一个前置数据处理器 +### 预处理器 `$preprocessor` + +定义数据预处理器: + ```php protected $preprocessor = [ - 'name' => ['默认名称', ProcessorExecCond::WHEN_EMPTY] + 'name' => 'trim' ]; ``` -关于前置数据处理器的详情请查看[数据处理器](https://v.itwmw.com/6/Processor.html)一节 -### $postprocessor -为字段定义一个后置数据处理器 +### 后处理器 `$postprocessor` + +定义数据后处理器: + ```php protected $postprocessor = [ - 'name' => ['trim', ProcessorExecCond::WHEN_NOT_EMPTY, ProcessorParams::Value] + 'age' => 'intval' ]; ``` -关于后置数据处理器的详情请查看[数据处理器](https://v.itwmw.com/6/Processor.html)一节 -### $ruleMessage -当前类中自定义方法验证失败后的错误消息 +### 自定义属性 `$customAttributes` + +自定义属性名称用于错误消息: + ```php - protected $ruleMessage = [ - ':attribute的值只能具有中文' +protected $customAttributes = [ + 'name' => '用户名', + 'email' => '邮箱地址' ]; ``` -点击查看[示例](https://v.itwmw.com/6/Rule.html#%E4%BD%BF%E7%94%A8%E7%B1%BB%E6%96%B9%E6%B3%95) -### $regex -预定义正则表达式验证规则,详情查看[正则表达式规则](https://v.itwmw.com/6/Rule.html#%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E8%A7%84%E5%88%99) +### 规则消息映射 `$ruleMessage` + +规则与消息的映射关系: + ```php -protected $regex = [ - 'number' => '/^\d+$/' +protected $ruleMessage = [ + 'required' => '字段 :attribute 必须填写', + 'email' => '字段 :attribute 必须是一个有效的邮箱地址' ]; ``` -### $group -定义验证规则组 -```php -protected $group = [ - 'username' => 'alpha_num|min:5|max:10' -]; +### 正则表达式验证 `$regex` -protected $rule = [ - 'username' => 'required|username' +使用正则表达式进行验证: + +```php +protected $regex = [ + 'password' => '/^[A-Za-z0-9]{6,20}$/' ]; ``` -也可以使用数组格式: + +### 规则组 `$group` + +定义规则组以便复用: + ```php protected $group = [ - 'username' => [ - 'alpha_num', - 'min:5', - 'max:10' - ] -]; - -protected $rule = [ - 'username' => 'required|username' + 'user' => ['name', 'email', 'password'] ]; ``` ## 特别鸣谢 -感谢 Jetbrains 提供的 IDE 开源许可。 - -[![](https://resources.jetbrains.com/storage/products/company/brand/logos/jb_beam.svg)](https://www.jetbrains.com/?from=https://gitee.com/yepyuyu/wm-validate) +感谢所有为本项目做出贡献的开发者和支持者。 \ No newline at end of file