0

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

然后我有一个表单请求来验证输入。如果我在做任何事情之前转储输入,那是正确的: "zip" => "80980-980". 我可以使用 regex: 验证这一点"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:8I get The zip must be 8 digits.,则"zip" => "80980980"再次输入。

我究竟做错了什么?

4

1 回答 1

0

大小不起作用,因为验证器认为您尝试检查数字,因此size:8检查数字 8,您可以将变量转换为字符串或使用正则表达式

于 2015-05-05T15:43:45.387 回答