所以我有这个:
'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])?)$/']