从仅限数字的类似zip的输入中删除破折号后,请求验证(大小或数字)失败

时间:2015-05-04 18:45:15

标签: laravel-5 laravel-validation

我有一个巴西邮政编码,我必须验证。我正在使用输入掩码使其在JS中更好地查找和验证。  格式为:99999-999。所以5个数字,一个破折号,然后是3个数字。

然后我有一个表单请求来验证输入。如果我在做任何事情之前转储输入,那就是正确的:"zip" => "80980-980"。我可以使用正则表达式验证这一点:"zip" => 'regex:/[0-9]{5}-[0-9]{3}/',,但我不认为它是正确的。

所以我要删除破折号:

$this->merge(['zip' => str_replace('-', '', $this->get('zip')) ]);

如果我转储输入,则再次正确:"zip" => "80980980"

这是表单请求:

class AddressCreateRequest extends Request {

public function authorize()
{
    return true;
}

public function rules()
{
    $this->merge(['zip' => str_replace('-', '', $this->get('zip')) ]);

    //dd($this->all());

    return [
        ...
       "zip"       => "required|digits:8",
        //"zip" => 'regex:/[0-9]{5}-[0-9]{3}/',
       ...
    ];
}

}

但如果我尝试使用size:8对此进行验证,即使输入为The zip must be 8 characters.,我也会这样做:"zip" => "80980980"

如果我尝试使用digits:8,我会The zip must be 8 digits.,再次输入"zip" => "80980980"

我做错了什么?

1 个答案:

答案 0 :(得分:0)

大小不起作用beacuse Validator认为您尝试检查一个数字,所以size:8检查数字8,您可以将变量转换为字符串或 使用正则表达式