表单请求验证JSON

时间:2016-10-10 16:41:37

标签: laravel validation

我正在尝试验证输入是否有效json。但是它返回“123”的成功作为输入。这似乎没有效果,或者至少在我需要的方面无效。

您是否知道改进json输入验证的方法?

public function rules()
{
    switch($this->method()) {
        case "GET":
            return [];
        case "DELETE":
            return [];
        default:
            return [
                'name' => 'required',
                'templatestring'  => 'required|JSON'
            ];
    }
}

1 个答案:

答案 0 :(得分:3)

123是基于较新RFC 7159的有效JSON。

如果您尝试根据RFC 4627验证JSON字符串,则应该使用regex验证规则。例如:

$data = [
    'name'           => 'test',
    'templatestring' => '123'
];

$validator = Validator::make($data, [
    'name'           => 'required',
    'templatestring' => 'required|regex:/[^,:{}\\[\\]0-9.\\-+Eaeflnr-u \\n\\r\\t]/'
]);

// With `123` this returns true (as it fails).
// If you set $data['templatestring'] = '{"test": 123}' this returns false.
return $validator->fails();

正则表达式取自this answer