【问题标题】:how to add rule for time in laravel如何在laravel中添加时间规则
【发布时间】:2020-11-20 10:37:38
【问题描述】:

我想在 laravel 中添加一个基于时间类型字符串的规则。用户会像 mm:ss 这样发送歌曲时间,有时它可以为空,有时它会发送歌曲时间 2:50。我已添加以下代码,但无法添加时间规则。

    $data = request(['songTime']);
$rules = [            
            'songTime' => 'string|nullable|MM:SS'
        ];

        $validator = Validator::make($data, $rules);
        if ($validator->fails() ) {
            return response()->json([
                'message' => 'Invalid Request',
                'error' => $validator->messages()
            ], 400);
        }

【问题讨论】:

标签: php laravel validation rules


【解决方案1】:

我建议两种方法,第一种是使用 Laravel 的 regex 规则。

$rules = [            
  'songTime' => ['string', 'nullable', 'regex:/\d{1,2}:\d{1,2}/']
];

您需要稍微修改一下正则表达式,这将接受任何一位或两位数字、冒号和数字的模式。所以像 2:99 这样的东西会被错误地接受。

另一种选择是写一个custom rule。此处的示例使用了闭包,但我强烈建议将其提取到自己的类中。

$rules = [
    'songTime' => [
        'string',
        'nullable',
        static function ($attribute, $value, $fail) {
            [$min, $sec] = explode(':', $value);

            if (ctype_digit($min) === false || ctype_digit($sec) === false || $sec > 59) {
                $fail($attribute . ' is invalid.');
            }
        },
    ],
];

【讨论】:

    【解决方案2】:

    使用 date_format 规则验证,如 H:i:s 或 i:s,您还可以使用表单验证请求,这将使您的代码更小到控制器文件中。

    <?php
    namespace App\Http\Requests;
    
    use Illuminate\Foundation\Http\FormRequest;
    
    class ValidateSongTimeRequest extends FormRequest {
    
     /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize() {
        return true;
    }
    
    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules() {
        return [
             'songTime' => 'required|date_format:H:i:s'
        ];
    }
    }
    

    在控制器文件中,你可以这样使用,

    public function validateTime(ValidateSongTimeRequest $request) {
        $inputs = $request->all();
        try {
            
        } catch (Exception $exception) {
            Log::error($exception);
        }
     throw new Exception('Error occured'.$exception->getMessage());
    }
    

    【讨论】:

      猜你喜欢
      • 2018-05-09
      • 2020-12-29
      • 2019-02-01
      • 2019-12-18
      • 2019-08-28
      • 2015-04-30
      • 1970-01-01
      • 2013-10-31
      • 2020-01-06
      相关资源
      最近更新 更多