public function validate($pattern)
{
$pattern = $this->findReplacements($pattern);
if (false !== strpos($pattern, '@')) {
throw new InvalidPatternException('Unknown shorthand.');
}
$parts = preg_split('/[\\s\\t]+/', $pattern);
$tests = [['partName' => 'minute', 'pattern' => '[0-5]?\\d', 'required' => true], ['partName' => 'hour', 'pattern' => '[01]?\\d|2[0-3]', 'required' => true], ['partName' => 'day', 'pattern' => '0?[1-9]|[12]\\d|3[01]', 'required' => true], ['partName' => 'month', 'pattern' => '[1-9]|1[012]', 'required' => true], ['partName' => 'day of week', 'pattern' => '[0-6]', 'required' => true], ['partName' => 'year', 'pattern' => '20([0-9]{2})', 'required' => false]];
foreach ($tests as $i => $test) {
if (!$test['required'] && !isset($parts[$i])) {
continue;
}
if (!isset($parts[$i]) || !preg_match($this->buildPattern($test['pattern']), $parts[$i])) {
throw new InvalidPatternException(sprintf('Invalid %s "%s".', $test['partName'], isset($parts[$i]) ? $parts[$i] : ''));
}
}
return $pattern;
}