PHP Time Validator принимает однозначное число для часа и минут - PullRequest
0 голосов
/ 13 декабря 2018

Итак, я сделал этот валидатор в 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.

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Вы также можете использовать этот шаблон:

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

Результат такой же, как у @ Michael

Приветствия

0 голосов
/ 13 декабря 2018

Делая первую цифру класса символов [] необязательной группировкой с ?, вы сможете поддерживать его опускание.

'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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...