Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在laravel上使用正则表达式验证日期时间_Regex_Laravel - Fatal编程技术网

Regex 在laravel上使用正则表达式验证日期时间

Regex 在laravel上使用正则表达式验证日期时间,regex,laravel,Regex,Laravel,Laravel regex日期验证未按预期工作,regex应在时间部分中匹配09:00:00到16:00:00,但它给出了一个内部服务器错误: $validator = Validator::make($request->all(), [ 'datetime' => 'required|date|after:tomorrow|regex:/((0[9]|1[0-5]):[0-5][0]:00)|(16:00:00)$/g', 'sub

Laravel regex日期验证未按预期工作,regex应在时间部分中匹配
09:00:00
16:00:00
,但它给出了一个内部服务器错误:

$validator = Validator::make($request->all(), [
            'datetime'  => 'required|date|after:tomorrow|regex:/((0[9]|1[0-5]):[0-5][0]:00)|(16:00:00)$/g',
            'subject'   => 'required|max:255',
        ]);

        if ($validator->fails()) {
            return response()->json([
                'status'    => '500',
                'success'   => 'false',
                'error'     => $validator->messages()
            ]);
        }
如果我在没有正则表达式的情况下再次尝试,验证将按预期工作,并将插入datetime字段,我怀疑它试图将正则表达式与date对象匹配,而不是与它的字符串表示形式匹配,但我不知道从何处开始文档没有详细介绍正则表达式

理想情况下,我希望它显示一条错误消息,内容是“输入上午9点到下午4点之间的时间,仅限小时”,而不是失败

谢谢你(我的):

注意:使用正则表达式模式时,可能需要在数组中指定规则,而不是使用管道分隔符,特别是当正则表达式包含管道字符时

那么,试试这个:

$validator = Validator::make($request->all(), [
     'datetime'  => [
         'required',
         'date',
         'after:tomorrow',
         'regex:/((0[9]|1[0-5]):[0-5][0]:00)|(16:00:00)$/',
     ],
     'subject'   => 'required|max:255',
]);
注意:我删除了
g
标志,因为它是不必要的。表达式要么匹配,要么不匹配——无需全局查找所有匹配项


至于更新验证程序类返回的错误消息,您只需:

来自(我的):

注意:使用正则表达式模式时,可能需要在数组中指定规则,而不是使用管道分隔符,特别是当正则表达式包含管道字符时

那么,试试这个:

$validator = Validator::make($request->all(), [
     'datetime'  => [
         'required',
         'date',
         'after:tomorrow',
         'regex:/((0[9]|1[0-5]):[0-5][0]:00)|(16:00:00)$/',
     ],
     'subject'   => 'required|max:255',
]);
注意:我删除了
g
标志,因为它是不必要的。表达式要么匹配,要么不匹配——无需全局查找所有匹配项


至于更新验证程序类返回的错误消息,您只需:


好的,正则表达式应该是
regex://^((09|1[0-5]):[0-5][0-9]:00 | 16:00:00)$/
,但这里很可能需要一个数组,而不是
分隔的参数。不应该,因为这是字符串的第二部分,^使其无效,我正在测试日期时间的时间:嗯,正则表达式应该是
regex://^((09 | 1)[0-5]:[0-5][0-9]:00 | 16:00:00)$/
但很可能这里需要一个数组,而不是
|
分隔参数。不应该,因为这是字符串的第二部分,^使其无效,我正在测试日期时间的时间:好的,谢谢,我确实看到了,但假设它是允许的(也许不应该说may),我该如何添加自定义消息?我需要创建一个全新的验证器类,还是只需为此添加一个参数?@CraigHarley他们肯定可以更好地使用这个词。据我所知,除非在表达式中使用管道分隔符,否则没有必要添加自定义消息。我已经更新了我的答案来解释自定义消息。好的,谢谢,我这样做了e但假设这是允许的(也许不应该说可能),我该如何添加自定义消息?我需要创建一个全新的验证器类,还是只需为此添加一个参数?@CraigHarley他们肯定可以更好地使用这个词。据我所知,除非在表达式中使用管道分隔符,否则没有必要这样做。我已经更新了我的答案来解释自定义消息。