PHP时间验证器接受小时和分钟的1位数字

时间:2018-12-13 02:48:44

标签: php validation time

因此,我在PHP中创建了该验证器,用于验证所提供的时间是否为24小时格式:

$cols = [
        'time'  => $val['time'],
];

$validator = Validator::make($cols, 
           [
            'time' => ['required','regex:/^(?:2[0-3]|[01][0-9]):[0-5][0-9]$/'],
           ],
           [
            'time.required' => 'Start time is a required field.',
            'time.regex'    => 'Start time is not a valid 24hr format.',
          ],
);

因此,这可以成功验证时间格式是否为hh:mm,但是如何使它接受h:mmh:mhh:m格式(如9:00)的值,9:110:1

2 个答案:

答案 0 :(得分:2)

通过将[]的第一位数字字符类分组为?可选,您应该能够支持省略它。

'time' => ['required','regex:/^(?:2[0-3]|[01]?[0-9]):[0-5]?[0-9]$/'],
// ------------------------------------------^------------^------

$pattern = '/^(?:2[0-3]|[01]?[0-9]):[0-5]?[0-9]$/';
foreach (['12:24','9:24','9:5','12:5','23:00','22:9'] as $time) {
  var_dump((bool)preg_match($pattern, $time));
}
// bool(true)
// bool(true)
// bool(true)
// bool(true)
// bool(true)
// bool(true)

// non-matching
foreach (['99:22','99:0','0:99'] as $invalid) {
  var_dump((bool)preg_match($pattern, $invalid));
}
// bool(false)
// bool(false)
// bool(false)

答案 1 :(得分:1)

您还可以使用以下模式:

/^(?:2[0-3]|([01])?[0-9]):[0-5][0-9]$/

与@Michael的结果相同

欢呼