美文网首页Laravel开发实践
Laravel表单验证数字时,size、between、max不

Laravel表单验证数字时,size、between、max不

作者: 如梦又似幻 | 来源:发表于2020-01-15 19:57 被阅读0次

    在laravel的实际开发时,表单验证有时会来验证数字的大小。
    在laravel的表单验证中,与数字大小的判断有关的有:size、between、min、max

    between:min,max

    验证字段值的大小是否介于指定的 minmax 之间。字符串、数值或是文件大小的计算方式和 size 规则相同。

    max:value

    字段值必须小于或等于 value 。字符串、数值或是文件大小的计算方式和 size 规则相同。

    min:value

    字段值必须大于或等于 value。字符串、数值或是文件大小的计算方式和 size 规则相同。

    size:value

    验证字段值的大小是否符合指定的 value 值。对于字符串来说,value 为字符数。对于数字来说,value 为某个整数值。对文件来说,size 对应的是文件大小(单位 kb )。

    可以得知,这些验证规则都是基于size的。那么我们在项目中使用between:

    然后再次提交表单,我们希望这个字段的值在2~4之间。提交之后,却发现毫无作用,数据为-1时,仍然正常保存。甚至在把between设置为 3~5 时会提醒:experiment type 必须介于 3 - 4 个字符之间。

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


    可以看到主要的验证方法是 validate($attribute, $rule),继续查看该方法:
    前边几行代码是用来过滤参数的,可以注意到这里拼接了一个方法 $method = "validate{$rule}",而当我们使用between方法来验证时,该方法拼接为 validateBetween ,继续在这个php类中寻找该方法:
    接下来查看 getSize($attribute, $value) 方法: 可以看到,如果要判断的值为数字而且这个$hasNumeric 为真时,才会真正来判断这个值的大小,其他情况下,当值为数组时判断数组的大小,当值为字符串时判断字符串的长度。那么我们再来看一下这个hasRule 方法和这个验证类的$numericRules属性到底是什么: $numericRules 属性 hasRule 方法

    可以看出,当验证的规则中有 NumericInteger 时,laravel的表单验证才会来验证数字的大小,默认情况下是判断字符串的长度的。

    所以,当需要验证表单数据中数字的大小时,在验证规则中一定要加入 NumericInteger 其一,size、between、max、min这些验证才会起作用。

    相关文章

      网友评论

        本文标题:Laravel表单验证数字时,size、between、max不

        本文链接:https://www.haomeiwen.com/subject/ymfxzctx.html