关于php:Laravel自定义验证规则

Laravel custom validation rule

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

自定义验证以在$this->validate($request, []);中使用它

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

1
2
3
4
5
6
7
8
9
$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


最快的方法是在控制器操作中使用内联验证器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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

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


您可以在控制器中创建自定义验证,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
$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']]);
                }

希望这可以帮助。


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

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