From be41fc20318cb05590d0652a093e875759f26d21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9A=8F=E9=A3=8E?= <2721885092@qq.com> Date: Sat, 25 Jan 2025 12:59:14 +0800 Subject: [PATCH] =?UTF-8?q?=20=E6=96=B0=E5=A2=9E:=20CronUtil.isValidExpres?= =?UTF-8?q?sion=E6=96=B9=E6=B3=95=EF=BC=8C=E9=AA=8C=E8=AF=81=E4=BC=A0?= =?UTF-8?q?=E5=85=A5=E7=9A=84Cron=E8=A1=A8=E8=BE=BE=E5=BC=8F=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E5=90=88=E6=B3=95=EF=BC=9B=E5=AE=8C=E5=96=84PatternPa?= =?UTF-8?q?rser.parseGroupPattern=E9=80=BB=E8=BE=91=EF=BC=8C=E5=8A=A0?= =?UTF-8?q?=E5=85=A5=E5=AF=B9=E4=BC=A0=E5=85=A5=E8=A1=A8=E8=BE=BE=E5=BC=8F?= =?UTF-8?q?=E4=B8=BAnull=E5=92=8C=E7=A9=BA=E7=9A=84=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/dromara/hutool/cron/CronUtil.java | 17 +++++++++++++++++ .../cron/pattern/parser/PatternParser.java | 1 + .../org/dromara/hutool/cron/demo/CronTest.java | 11 +++++++++++ 3 files changed, 29 insertions(+) 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")); + + } }