`
loong_lang
  • 浏览: 10414 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

CronExpression(克龙表达式)的验证代码JavaScript

阅读更多

  一直想用正则表达式写一个CronExpression的验证代码,但由于JavaScript水平有限,也查了相关资料,觉得克龙表达式,的正则表达式不容易写。
   所以根据CronExpressionValidator类的思路,改写了一个Cron Expression Validator,这样在做验证就比较方便了。

 

    /**
     * Validates a cron expression.
     *
     * @param cronExpression The expression to validate
     * @return True is expression is valid
     */
    function cronValidate(cronExpression ){
        //alert("校验函数的开始!");
        var cronParams = cronExpression.split(" ");

        if (cronParams.length < 6 || cronParams.length > 7) {
            return false;
        }

        //CronTrigger cronTrigger = new CronTrigger();
        //cronTrigger.setCronExpression( cronExpression );

        if (cronParams[3] == "?" || cronParams[5]=="?") {
            //Check seconds param
            if (!checkSecondsField(cronParams[0])) {
                return false;
            }

            //Check minutes param
            if (!checkMinutesField(cronParams[1])) {
                return false;
            }

            //Check hours param
            if (!checkHoursField(cronParams[2])) {
                return false;
            }

            //Check day-of-month param
            if (!checkDayOfMonthField(cronParams[3])) {
                return false;
            }

            //Check months param
            if (!checkMonthsField(cronParams[4])) {
                return false;
            }

            //Check day-of-week param
            if (!checkDayOfWeekField(cronParams[5])) {
                return false;
            }

            //Check year param
            if (cronParams.length == 7) {
                if (!checkYearField(cronParams[6])) {
                    return false;
                }
            }

            return true;
        } else {
            return false;
        }
    }

    function checkSecondsField(secondsField) {
        return checkField(secondsField, 0, 59);
    }


    function checkField(secondsField, minimal, maximal) {
        if (secondsField.indexOf("-") > -1 ) {
            var startValue = secondsField.substring(0, secondsField.indexOf( "-" ));
            var endValue = secondsField.substring(secondsField.indexOf( "-" ) + 1);

            if (!(checkIntValue(startValue, minimal, maximal, true) && checkIntValue(endValue, minimal, maximal, true))) {
                return false;
            }
            try {
                var startVal = parseInt(startValue, 10);
                var endVal = parseInt(endValue, 10);

                return endVal > startVal;
            } catch (e) {
                return false;
            }
        } else if (secondsField.indexOf(",") > -1) {
            return checkListField(secondsField, minimal, maximal);
        } else if (secondsField.indexOf( "/" ) > -1) {
            return checkIncrementField( secondsField, minimal, maximal );
        } else if (secondsField.indexOf( "*" ) != -1) {
            return true;
        } else {
            return checkIntValue(secondsField, minimal, maximal);
        }
    }

    function checkIntValue(value, minimal, maximal, checkExtremity) {
        try {
            var val = parseInt(value, 10);
            //判断是否为整数
            if (value == val) {
                if (checkExtremity) {
                    if (val < minimal || val > maximal) {
                        return false;
                    }
                }

                return true;
            }

            return false;
        } catch (e) {
            return false;
        }
    }

    function checkMinutesField(minutesField) {
        return checkField(minutesField, 0, 59);
    }

    function checkHoursField(hoursField) {
        return checkField(hoursField, 0, 23);
    }

    function checkDayOfMonthField(dayOfMonthField) {
        if (dayOfMonthField == "?") {
            return true;
        }

        if (dayOfMonthField.indexOf("L") >= 0) {
            return checkFieldWithLetter(dayOfMonthField, "L", 1, 7, -1, -1);
        } else if ( dayOfMonthField.indexOf("W") >= 0) {
            return checkFieldWithLetter(dayOfMonthField, "W", 1, 31, -1, -1);
        } else if (dayOfMonthField.indexOf("C") >= 0) {
            return checkFieldWithLetter(dayOfMonthField, "C", 1, 31, -1, -1);
        } else {
            return checkField( dayOfMonthField, 1, 31 );
        }
    }


    function checkMonthsField(monthsField) {
/*        monthsField = StringUtils.replace( monthsField, "JAN", "1" );
        monthsField = StringUtils.replace( monthsField, "FEB", "2" );
        monthsField = StringUtils.replace( monthsField, "MAR", "3" );
        monthsField = StringUtils.replace( monthsField, "APR", "4" );
        monthsField = StringUtils.replace( monthsField, "MAY", "5" );
        monthsField = StringUtils.replace( monthsField, "JUN", "6" );
        monthsField = StringUtils.replace( monthsField, "JUL", "7" );
        monthsField = StringUtils.replace( monthsField, "AUG", "8" );
        monthsField = StringUtils.replace( monthsField, "SEP", "9" );
        monthsField = StringUtils.replace( monthsField, "OCT", "10" );
        monthsField = StringUtils.replace( monthsField, "NOV", "11" );
        monthsField = StringUtils.replace( monthsField, "DEC", "12" );*/

        monthsField.replace("JAN", "1");
        monthsField.replace("FEB", "2");
        monthsField.replace("MAR", "3");
        monthsField.replace("APR", "4");
        monthsField.replace("MAY", "5");
        monthsField.replace("JUN", "6");
        monthsField.replace("JUL", "7");
        monthsField.replace("AUG", "8");
        monthsField.replace("SEP", "9");
        monthsField.replace("OCT", "10");
        monthsField.replace("NOV", "11");
        monthsField.replace("DEC", "12");

        return checkField(monthsField, 1, 31);
    }

    function checkDayOfWeekField(dayOfWeekField) {
/*        dayOfWeekField = StringUtils.replace( dayOfWeekField, "SUN", "1" );
        dayOfWeekField = StringUtils.replace( dayOfWeekField, "MON", "2" );
        dayOfWeekField = StringUtils.replace( dayOfWeekField, "TUE", "3" );
        dayOfWeekField = StringUtils.replace( dayOfWeekField, "WED", "4" );
        dayOfWeekField = StringUtils.replace( dayOfWeekField, "THU", "5" );
        dayOfWeekField = StringUtils.replace( dayOfWeekField, "FRI", "6" );
        dayOfWeekField = StringUtils.replace( dayOfWeekField, "SAT", "7" );*/

        dayOfWeekField.replace("SUN", "1" );
        dayOfWeekField.replace("MON", "2" );
        dayOfWeekField.replace("TUE", "3" );
        dayOfWeekField.replace("WED", "4" );
        dayOfWeekField.replace("THU", "5" );
        dayOfWeekField.replace("FRI", "6" );
        dayOfWeekField.replace("SAT", "7" );        

        if (dayOfWeekField == "?") {
            return true;
        }

        if (dayOfWeekField.indexOf("L") >= 0) {
            return checkFieldWithLetter(dayOfWeekField, "L", 1, 7, -1, -1);
        } else if (dayOfWeekField.indexOf("C") >= 0) {
            return checkFieldWithLetter(dayOfWeekField, "C", 1, 7, -1, -1);
        } else if (dayOfWeekField.indexOf("#") >= 0) {
            return checkFieldWithLetter(dayOfWeekField, "#", 1, 7, 1, 5);
        } else {
            return checkField(dayOfWeekField, 1, 7);
        }
    }

    function checkYearField(yearField) {
        return checkField(yearField, 1970, 2099);
    }


    function checkFieldWithLetter(value, letter, minimalBefore, maximalBefore,
                                          minimalAfter, maximalAfter) {
        var canBeAlone = false;
        var canHaveIntBefore = false;
        var canHaveIntAfter = false;
        var mustHaveIntBefore = false;
        var mustHaveIntAfter = false;

        if (letter == "L") {
            canBeAlone = true;
            canHaveIntBefore = true;
            canHaveIntAfter = false;
            mustHaveIntBefore = false;
            mustHaveIntAfter = false;
        }
        if (letter == "W" || letter == "C") {
            canBeAlone = false;
            canHaveIntBefore = true;
            canHaveIntAfter = false;
            mustHaveIntBefore = true;
            mustHaveIntAfter = false;
        }
        if (letter == "#") {
            canBeAlone = false;
            canHaveIntBefore = true;
            canHaveIntAfter = true;
            mustHaveIntBefore = true;
            mustHaveIntAfter = true;
        }

        var beforeLetter = "";
        var afterLetter = "";

        if (value.indexOf(letter) >= 0 ) {
            beforeLetter = value.substring( 0, value.indexOf(letter));
        }

        if (!value.endsWith(letter)) {
            afterLetter = value.substring( value.indexOf( letter ) + 1 );
        }

        if (value.indexOf(letter) >= 0) {
            if (letter == value) {
                return canBeAlone;
            }

            if (canHaveIntBefore) {
                if (mustHaveIntBefore && beforeLetter.length == 0) {
                    return false;
                }

                if (!checkIntValue(beforeLetter, minimalBefore, maximalBefore, true)){
                    return false;
                }
            } else {
                if (beforeLetter.length > 0 ) {
                    return false;
                }
            }

            if (canHaveIntAfter) {
                if ( mustHaveIntAfter && afterLetter.length == 0 ) {
                    return false;
                }

                if (!checkIntValue(afterLetter, minimalAfter, maximalAfter, true)) {
                    return false;
                }
            } else {
                if (afterLetter.length > 0) {
                    return false;
                }
            }
        }

        return true;
    }

/*    function checkIntValue(value, minimal, maximal) {
        return checkIntValue(value, minimal, maximal, true);
    } */

    function checkIncrementField(value, minimal, maximal) {
        var start = value.substring(0, value.indexOf("/"));

        var increment = value.substring(value.indexOf("/") + 1);

        if (!("*" == start)) {
            return checkIntValue(start, minimal, maximal, true) && checkIntValue(increment, minimal, maximal, false);
        } else {
            return checkIntValue(increment, minimal, maximal, true);
        }
    }



    function checkListField(value, minimal, maximal ) {
        var st = value.split(",");

        var values = new Array(st.length);

        for(var j = 0; j < st.length; j++) {
            values[j] = st[j];
        }

        var previousValue = -1;

        for (var i= 0; i < values.length; i++) {
            var currentValue = values[i];

            if (!checkIntValue(currentValue, minimal, maximal, true)) {
                return false;
            }

            try {
                var val = parseInt(currentValue, 10);

                if (val <= previousValue) {
                    return false;
                } else {
                    previousValue = val;
                }
            } catch (e) {
                // we have always an int
            }
        }

        return true;
    }

 

这样在ext中只需指定自定义的验证函数,就可以了

       {    id:'custom',
            title:'自定义',
            layout:'form',
            name:'custom',            
            defaults: {width: 230},
            items: [{
                xtype : 'textfield',
                fieldLabel : '克龙表达式',
                name : 'fcronexp',
                validator: cronValidate
            }]
        }
        ]
       },
  • 大小: 25.3 KB
分享到:
评论

相关推荐

    CronExpression一个cron表达式解析器

    2. **验证cron表达式**:检查输入的表达式是否有效,避免因为错误的语法导致的问题。 3. **生成cron表达式**:根据需求生成符合规范的cron表达式,比如根据特定的日期和时间间隔。 4. **比较时间**:比较两个cron...

    Quartz cronExpression表达式

    Quartz cronExpression 表达式 Quartz cronExpression 表达式是一个由六至七个字段组成的字符串,其中 6 个字段是必须的,而一个是可选的。每个字段的允许值和特殊字符如下: 1. 秒 (0-59):允许的特殊字符有 * / ...

    cron表达式校验,验证是否是正确的cron表达式,调用的主方法是function cronValidate(cronExpre

    在`CronCheck.js`文件中,很可能是实现了这个校验功能的完整代码,包括了对各种特殊字符和表达式结构的全面验证。而`新建 文本文档.txt`可能是用来记录或说明校验规则或使用示例的文档。 总的来说,理解和校验cron...

    .net C# Cron表达式解析.

    - 使用静态方法`CronExpression.Parse("你的Cron表达式")`解析表达式,得到CronExpression对象。 - 通过`NextOccurrences(DateTime now)`或`GetNextOccurrence(DateTime now)`方法,获取下一个触发时间点。 在...

    详细简单的cron表达式校验js

    cron表达式校验,验证是否是正确的cron表达式,调用的主方法是function cronValidate(cronExpression ),有需要可以看一下

    Java 写的Cron表达式解析

    如果要深入学习或修改这个项目,你需要查看代码来了解它的实现细节,包括如何处理用户输入、如何解析和验证Cron表达式,以及如何在Swing界面中展示这些信息。 总结起来,Java中的Cron表达式解析涉及到字符串处理、...

    react+ts+antd cron表达式组件

    3. 验证逻辑:Cron表达式需要符合特定的格式,组件内可能包含验证函数来确保输入的有效性。 4. 用户交互:组件可能有交互式的元素,如下拉菜单、输入框等,让用户选择或输入值。 5. 状态管理:使用React的状态管理和...

    定时任务cron 解析为中文.docx

    5. `org.quartz.CronExpression`:Quartz定时任务库提供的cron表达式验证类。 6. `org.springframework.util.Assert`:Spring Framework提供的断言工具类。 `CronExpParserUtil`的核心方法是`translateToChinese`,...

    Quartz在Spring中动态设置cronExpression

    为了动态更新Cron表达式,通常需要实现一个机制,当Cron表达式改变时,能够更新`CronTriggerBean`的`cronExpression`属性,并重启触发器。这可能涉及到监听配置变化、数据库更新或其他外部事件,然后通过Spring的...

    cronExpression介绍.doc

    CronExpression 是一个强大且灵活的表达式,它允许用户指定一个触发器的执行时间和频率。该表达式由六至七个字段组成,由空格分隔,其中六个字段是必须的,而一个字段是可选的。 字段介绍 1. 秒(0-59):指定秒数...

    Quartz之CronExpression详解

    CronExpression是一种用于配置Quartz调度器中定时任务的表达式格式。通过这种格式化的字符串,用户能够灵活地定义任务执行的时间规律。CronExpression由六个或七个字段组成,各字段之间用空格分隔,具体包括秒、分、...

    cron表达式生成工具.rar

    在Java中,可以使用`org.quartz.CronExpression`类来解析cron表达式,验证其是否有效,并获取下一个触发时间等信息。这个工具可能内置了这样的功能,便于用户测试和调试cron表达式。 总的来说,"cron表达式生成工具...

    十分钟教会你cron表达式

    十分钟教会你cron表达式,介绍怎么写cron表达式的语法

    quartz中cronExpression 配置资源

    `cronExpression` 由七个子表达式组成,分别代表秒、分、小时、日、月、周几和年份。每个子表达式都有一定的取值范围和特殊字符,用于指定任务执行的精确时间点。 1. **秒**:0-59,可以用 `- * /` 进行区间、任意...

    quartz cronExpression配置说明

    对于开发和调试cronExpression,可以使用在线工具如CronMaker或直接在Quartz的源码中查看`org.quartz.CronExpression`类,它提供了对cron表达式的解析和验证功能。 总结来说,`quartz cronExpression`是Quartz框架...

    计划表达式的NET的例子

    你可以使用`Quartz.CronExpression`类来创建和解析CRON表达式。以下是一个简单的示例,展示了如何在C#中创建一个CRON表达式并获取下一次触发时间: ```csharp using Quartz; // 创建CRON表达式 var cronExpression...

    Quartz动态修改时间,java实现修改CronExpression方法

    本项目主要探讨如何在运行时动态修改Quartz定时任务的CronExpression,即cron表达式,来改变任务的执行时间。 首先,CronExpression是Quartz中用于定义时间触发规则的关键组件,它基于Unix的crontab语法,可以精确...

    CronExpressionGenerator:用于生成随机、有效的 cron 表达式的 Faker 提供程序

    定时表达式生成器生成有效的随机 cron 表达式。安装将 CronExpressionGenerator 库添加到您的composer.json文件中: composer require swekaj/cron-expression-generator用法要将其与一起使用,您必须将...

Global site tag (gtag.js) - Google Analytics