🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
>[danger] require 某个字段是必须的 ``` 'name' => 'require' ``` >[danger] require 验证原理 ``` // $value 是name的键值 // $result 是true验证通过 false验证失败 $result = !empty($value) || '0' == $value; ``` >[danger] require 特别注意 #### 如果验证规则没有添加require就表示没有值的话不进行验证 ``` // 如果name的值是空(除'0'外),不执行min验证 // 如果name的值不是空(除'0'外),才会执行min验证 'name' => 'min:3' ``` >[danger] `require` 验证 框架源码 ``` vendor/topthink/framework/src/think/Validate.php 822行的 is方法() 中的 827行 ``` ``` /** * 验证字段值是否为有效格式 * @access public * @param mixed $value 字段值 * @param string $rule 验证规则 * @param array $data 数据 * @return bool */ public function is($value, string $rule, array $data = []): bool { switch (Str::camel($rule)) { case 'require': // 必须 $result = !empty($value) || '0' == $value; break; case 'accepted': // 接受 $result = in_array($value, ['1', 'on', 'yes']); break; case 'date': // 是否是一个有效日期 $result = false !== strtotime($value); break; case 'activeUrl': // 是否为有效的网址 $result = checkdnsrr($value); break; case 'boolean': case 'bool': // 是否为布尔值 $result = in_array($value, [true, false, 0, 1, '0', '1'], true); break; case 'number': $result = ctype_digit((string) $value); break; case 'alphaNum': $result = ctype_alnum($value); break; case 'array': // 是否为数组 $result = is_array($value); break; case 'file': $result = $value instanceof File; break; case 'image': $result = $value instanceof File && in_array($this->getImageType($value->getRealPath()), [1, 2, 3, 6]); break; case 'token': $result = $this->token($value, '__token__', $data); break; default: if (isset($this->type[$rule])) { // 注册的验证规则 $result = call_user_func_array($this->type[$rule], [$value]); } elseif (function_exists('ctype_' . $rule)) { // ctype验证规则 $ctypeFun = 'ctype_' . $rule; $result = $ctypeFun($value); } elseif (isset($this->filter[$rule])) { // Filter_var验证规则 $result = $this->filter($value, $this->filter[$rule]); } else { // 正则验证 $result = $this->regex($value, $rule); } } return $result; } ```