【问题标题】:Laravel custom validation ruleLaravel 自定义验证规则
【发布时间】:2017-04-11 17:20:57
【问题描述】:

如何为一个输入值必须是整数并以 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

【问题讨论】:

    标签: php regex laravel validation


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      最快最简洁的方法是在控制器操作中添加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,作为整合大量验证逻辑的一种方式。

      【讨论】:

      • Method [validate/^120\d{11}$/] does not exist. 我收到错误消息 :(
      • 我也在使用'required|unique:client_devices|number'这个输入。
      • 'guarantee' => [ 'required', 'unique:client_devices', 'regex:/^120\d{11}$/', ], 终于找到我需要的了)
      【解决方案3】:

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

      $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']]);
                      }
      

      希望这会有所帮助。

      【讨论】:

      • Validator::make() 之后我可以在$this->validate($request, []); 中使用它吗?
      猜你喜欢
      • 2018-02-18
      • 2019-02-12
      • 2016-11-22
      • 2018-05-25
      • 2016-11-14
      • 1970-01-01
      • 2014-04-22
      • 2015-01-26
      • 2016-01-13
      相关资源
      最近更新 更多