Laravel表单验证数字时,size、between、max不
2020-01-15 本文已影响0人
如梦又似幻
在laravel的实际开发时,表单验证有时会来验证数字的大小。
在laravel的表单验证中,与数字大小的判断有关的有:size、between、min、max
between:min,max
验证字段值的大小是否介于指定的 min 和 max 之间。字符串、数值或是文件大小的计算方式和
size
规则相同。
max:value
字段值必须小于或等于 value 。字符串、数值或是文件大小的计算方式和
size
规则相同。
min:value
字段值必须大于或等于 value。字符串、数值或是文件大小的计算方式和
size
规则相同。
size:value
验证字段值的大小是否符合指定的 value 值。对于字符串来说,value 为字符数。对于数字来说,value 为某个整数值。对文件来说,size 对应的是文件大小(单位 kb )。
可以得知,这些验证规则都是基于size的。那么我们在项目中使用between:

我们来查看关于表单验证的源码:src/Illuminate/Validation/Validator.php
,

可以看到主要的验证方法是
validate($attribute, $rule)
,继续查看该方法:

前边几行代码是用来过滤参数的,可以注意到这里拼接了一个方法
$method = "validate{$rule}"
,而当我们使用between方法来验证时,该方法拼接为 validateBetween
,继续在这个php类中寻找该方法:

接下来查看
getSize($attribute, $value)
方法:

$hasNumeric
为真时,才会真正来判断这个值的大小,其他情况下,当值为数组时判断数组的大小,当值为字符串时判断字符串的长度。那么我们再来看一下这个hasRule
方法和这个验证类的$numericRules
属性到底是什么:


可以看出,当验证的规则中有 Numeric
或 Integer
时,laravel的表单验证才会来验证数字的大小,默认情况下是判断字符串的长度的。
所以,当需要验证表单数据中数字的大小时,在验证规则中一定要加入 Numeric
或 Integer
其一,size、between、max、min这些验证才会起作用。