Laravel时间24h格式正则表达式错误(无结束分隔符)

时间:2018-03-04 20:48:14

标签: php regex laravel

所以我有这个:

'title' => 'required|max:100|regex:/^(?=.*[a-zA-Z]).+$/',
'start_time' => 'date_format:H:i|regex:/^((([01]?[0-9]|2[0-3]):[0-5][0-9])?)$/',

标题工作正常(用户必须输入至少1个字母) 但是我遇到了返回的start_time问题

  

preg_match():没有结尾分隔符' /'发现",例外:   " ErrorException",...}

我想要的是验证24h格式,可能是用户广告AM或PM,例如:下午05:10,所以我想验证前5个字符并释放其余的字符,我认为它是'是的。

那么,我错过了什么让它运行?

3 个答案:

答案 0 :(得分:3)

您的规则已经完成您需要知道,指定验证规则,其中正则表达式由管道分隔可能导致导致意外行为。

定义验证规则的正确方法应该是:

'title' => 'required|max:100|regex:/^(?=.*[a-zA-Z]).+$/',
'start_time' => ['date_format:H:i','regex:/^((([01]?[0-9]|2[0-3]):[0-5][0-9])?)$/'],

您可以阅读官方文档:

  

正则表达式:图案

     

验证字段必须与给定的正则表达式匹配。

     

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

https://laravel.com/docs/5.6/validation#rule-regex

答案 1 :(得分:2)

试试这个:

'start_time' => ['date_format:H:i', 'regex:/^((([01]?[0-9]|2[0-3]):[0-5][0-9])?)$/'],

问题是正则表达式中的|字符。 Laravel将它用作规则之间的分隔符。

答案 2 :(得分:2)

正则表达式中的字符管|在分离规则中与|冲突。你必须初始化一个数组:

'start_time' => ['date_format:H:i', 'regex:/^((([01]?[0-9]|2[0-3]):[0-5][0-9])?)$/']