猿问

如何在laravel中添加时间规则

我想在 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);

        }


BIG阳
浏览 80回答 2
2回答

MYYA

我建议两种方法,第一种是使用 Laravel 的正则表达式规则。$rules = [               'songTime' => ['string', 'nullable', 'regex:/\d{1,2}:\d{1,2}/'] ];您需要稍微修改正则表达式,这将接受一个或两个数字、冒号和数字的任何模式。因此像 2:99 这样的值将会被错误地接受。另一种选择是编写自定义规则。这里的示例使用了闭包,但我强烈建议将其提取到自己的类中。$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.');            }        },    ],];

杨__羊羊

使用 date_format 规则验证,如 H:i:s 或 i:s,您还可以使用表单验证请求,这将使您的代码更小到控制器文件中。<?phpnamespace App\Http\Requests;use Illuminate\Foundation\Http\FormRequest;class ValidateSongTimeRequest extends FormRequest {&nbsp;/**&nbsp;* Determine if the user is authorized to make this request.&nbsp;*&nbsp;* @return bool&nbsp;*/public function authorize() {&nbsp; &nbsp; return true;}/**&nbsp;* Get the validation rules that apply to the request.&nbsp;*&nbsp;* @return array&nbsp;*/public function rules() {&nbsp; &nbsp; return [&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'songTime' => 'required|date_format:H:i:s'&nbsp; &nbsp; ];}}在控制器文件中,您可以这样使用,public function validateTime(ValidateSongTimeRequest $request) {&nbsp; &nbsp; $inputs = $request->all();&nbsp; &nbsp; try {&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; } catch (Exception $exception) {&nbsp; &nbsp; &nbsp; &nbsp; Log::error($exception);&nbsp; &nbsp; }&nbsp;throw new Exception('Error occured'.$exception->getMessage());}
随时随地看视频慕课网APP
我要回答