diff --git a/hutool-cron/src/main/java/org/dromara/hutool/cron/CronUtil.java b/hutool-cron/src/main/java/org/dromara/hutool/cron/CronUtil.java index 191b9d39b..b746c2e6f 100644 --- a/hutool-cron/src/main/java/org/dromara/hutool/cron/CronUtil.java +++ b/hutool-cron/src/main/java/org/dromara/hutool/cron/CronUtil.java @@ -20,6 +20,7 @@ package org.dromara.hutool.cron; import org.dromara.hutool.core.exception.HutoolException; import org.dromara.hutool.core.io.resource.NoResourceException; import org.dromara.hutool.cron.pattern.CronPattern; +import org.dromara.hutool.cron.pattern.parser.PatternParser; import org.dromara.hutool.cron.task.Task; import org.dromara.hutool.setting.Setting; import org.dromara.hutool.setting.SettingException; @@ -211,4 +212,20 @@ public class CronUtil { scheduler.stop(true); } + /** + * 验证是否为合法的Cron表达式 + */ + public static boolean isValidExpression(String expression) { + if (expression == null) { + return false; + } else { + try { + PatternParser.parse(expression); + return true; + } catch (RuntimeException e) { + return false; + } + } + } + } diff --git a/hutool-cron/src/main/java/org/dromara/hutool/cron/pattern/parser/PatternParser.java b/hutool-cron/src/main/java/org/dromara/hutool/cron/pattern/parser/PatternParser.java index b1edc3880..8a5f9a6a1 100644 --- a/hutool-cron/src/main/java/org/dromara/hutool/cron/pattern/parser/PatternParser.java +++ b/hutool-cron/src/main/java/org/dromara/hutool/cron/pattern/parser/PatternParser.java @@ -63,6 +63,7 @@ public class PatternParser { * @return {@link List} */ private static List parseGroupPattern(final String groupPattern) { + Assert.notBlank(groupPattern, "Cron expression must not be empty!"); final List patternList = SplitUtil.splitTrim(groupPattern, "|"); final List patternMatchers = new ArrayList<>(patternList.size()); for (final String pattern : patternList) { diff --git a/hutool-cron/src/test/java/org/dromara/hutool/cron/demo/CronTest.java b/hutool-cron/src/test/java/org/dromara/hutool/cron/demo/CronTest.java index 528cbd342..fa0a31d33 100644 --- a/hutool-cron/src/test/java/org/dromara/hutool/cron/demo/CronTest.java +++ b/hutool-cron/src/test/java/org/dromara/hutool/cron/demo/CronTest.java @@ -96,4 +96,15 @@ public class CronTest { CronUtil.setMatchSecond(true); CronUtil.start(); } + + @Test + @Disabled + public void isValidExpressionTest() { + Console.log(CronUtil.isValidExpression("5 * * * *")); + Console.log(CronUtil.isValidExpression("3-18 5 * * * *")); + Console.log(CronUtil.isValidExpression("")); + Console.log(CronUtil.isValidExpression(null)); + Console.log(CronUtil.isValidExpression("A B C D E F")); + + } }