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



所以我有这个:

'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((: 未找到结束分隔符 '/'",异常: "错误异常",...}

我想要的是验证 24h 格式,用户可能会在 AM 或 PM 上投放广告,例如:05:10 PM,所以我想验证前 5 个字符并释放其余字符,我认为这是正确的。

那么,我缺少什么来让它运行?

你的规则做得很好,但你需要知道,用管道分隔的正则表达式指定验证规则可能会导致不希望的行为。

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

'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

试试这个:

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

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

则表达式中的字符管道|与分隔规则中的|冲突。您必须初始化一个数组:

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

最新更新