Php 如何在laravel中添加时间规则
我想在laravel中添加一个基于时间类型字符串的规则。用户将发送歌曲的时间,如mm:ss有时它将为空,有时它将发送歌曲的时间2:50。我添加了以下代码,但无法添加时间规则Php 如何在laravel中添加时间规则,php,laravel,validation,rules,Php,Laravel,Validation,Rules,我想在laravel中添加一个基于时间类型字符串的规则。用户将发送歌曲的时间,如mm:ss有时它将为空,有时它将发送歌曲的时间2:50。我添加了以下代码,但无法添加时间规则 $data = request(['songTime']); $rules = [ 'songTime' => 'string|nullable|MM:SS' ]; $validator = Validator::make($da
$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: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.');
}
},
],
];
使用诸如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'
];
}
}
<?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());
}