Laravel自定义验证规则

时间:2016-11-28 03:11:20

标签: php regex laravel validation

如何为输入创建自定义验证规则,哪个值必须是整数并以120开头? 我已经阅读过关于制作自定义消息但没有理解规则的内容。 我想使用正则表达式来验证数据。 ^120\d{11}$这是我的正则表达式。 我是Laravel的新手,这就是为什么现在无法想象如何做到这一点。

$this->validate($request, []);

中使用自定义验证

现在我正在验证这样的数据:

$this->validate($request, [
    'user_id' => 'integer|required',
    'buy_date' => 'date',
    'guarantee' => 'required|unique:client_devices|number',
    'sn_imei' => 'required|unique:client_devices',
    'type_id' => 'integer|required',
    'brand_id' => 'integer|required',
    'model' => 'required'
]);

我想添加自定义验证的输入是guarantee

3 个答案:

答案 0 :(得分:1)

您可以在控制器中创建自定义验证:

$name = Input::get('field-name')

$infoValidation = Validator::make( 
                    array( // Input array
                        'name'  => $name,

                    ),
                    array( // rules array
                        'name'  => array("regex:/^120\d{11}$"),
                    ),

                    array( // Custom messages array
                        'name.regex' => 'Your message here',
                    )
                ); // End of validation

                $error = array();
                if ($infoValidation->fails())
                {
                    $errors =  $infoValidation->errors()->toArray();
                    if(count($errors) > 0)
                    {
                        if(isset($errors['name'])){
                            $response['errCode'] = 1;
                            $response['errMsg']  = $errors['name'][0];
                        }

                    }
                    return response()->json(['errMsg'=>$response['errMsg'],'errCode'=>$response['errCode']]);
                }

希望这有帮助。

答案 1 :(得分:1)

最快的方法是控制器操作中的inline validator

public function store(Request $request)
{

    $validator = Validator::make($request->all(), [
        'number' => [
            'regex' => '/^120\d{11}$/'
        ],
    ]);

    if ($validator->fails()) {
        return redirect('post/create')
            ->withErrors($validator)
            ->withInput();
    }

    return view('welcome');
}

number是请求中提交的字段的name

如果您要进行大量验证,可能需要考虑使用Form Request作为整合大量验证逻辑的方法。

答案 2 :(得分:0)

从Laravel 5.5开始,您可以直接在request对象上进行验证。

public function store(Request $request)
{
    $request->validate([
        'guarantee' => 'regex:/^120\d{11}$/'
    ]);
}