如何使用Laravel验证数字或数字来验证自动数字输入?

时间:2019-04-28 08:09:57

标签: laravel

我正在laravel 5.8中创建应用程序

我在价格字段中使用http://autonumeric.org/,以便用逗号分隔每三位数。因此,对于超过3位数字的数字,将带有逗号。

如果我输入的数字超过3位,则整数输入验证失败!显然是因为逗号。因此,我尝试在验证之前清理输入。但是问题仍然存在!

我尝试将输入的清理版本转换为int,但仍然无法正常工作!

这是我的请求类的样子:

public function rules()
    {
        $this->sanitize();

        return [
                   'base_price' => 'required|integer', //it fails if I enter a number with more than 3 digits!
                 ];


    }

    public function sanitize()
    {
        $input = $this->all();
        //sanitize
        $input['base_price'] = filter_var($input['base_price'], FILTER_SANITIZE_NUMBER_INT);
        //casting
        $input['base_price'] = (int) $input[base_price'];
        $this->replace($input);
    }

1 个答案:

答案 0 :(得分:0)

对于那些可能遇到相同问题的人,我将回答我自己的问题。

非常感谢@ Sohel0415在评论中的帮助,我能够解决此问题。

如本问题所述:Modify input before validation on Laravel 5.1。在验证之前,在sanitize()中调用rule()不会更改输入。它清除并修改了输入,但是此修改仅在验证之后使用。这是因为输入已经加载以进行验证。

FormRequest类实际上使用validationData()方法来访问将要验证的数据,这是在调用rule()之前发生的。

 protected function validationData() //the method inside Illuminate\Foundation\Http\FormRequest;
{
    return $this->all();
}

因此,如果我们仅在请求类中覆盖此方法,则可以解决此问题。

 protected function validationData()
{
    $this->sanitize();
    return parent::validationData(); // TODO: Change the autogenerated stub
}