因此,我在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:mm
或h:m
或hh:m
格式(如9:00
)的值,9:1
,10:1
。
答案 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的结果相同
欢呼