2 回答
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.');
}
},
],
];
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());
}
- 2 回答
- 0 关注
- 78 浏览
添加回答
举报