为了账号安全,请及时绑定邮箱和手机立即绑定

如何在laravel中添加时间规则

如何在laravel中添加时间规则

PHP
BIG阳 2023-09-08 14:03:16
我想在 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);        }
查看完整描述

2 回答

?
MYYA

TA贡献1868条经验 获得超4个赞

我建议两种方法,第一种是使用 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.');

            }

        },

    ],

];


查看完整回答
反对 回复 2023-09-08
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

使用 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());

}


查看完整回答
反对 回复 2023-09-08
  • 2 回答
  • 0 关注
  • 78 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信