Crontab 표현식이 적합한지 확인하기 위한 Javascript 샘플 코드에 대한 자세한 설명
这篇文章主要介绍了详解Javascript判断Crontab表达式是否合法的相关资料,需要的朋友可以参考下
Javascript判断Crontab表达式是否合法
这段时间在做Quartz任务调度,使用的Crontab表达式实现的。Crontab由前端页面输入,作为参数穿入后台。
虽然Quartz具有校验Crontab表达式的方法,如下:
boolean cronExpressionFlag = CronExpression.isValidExpression(crontab);
但是我一直想在前端直接验证,即不需要通过异步的方式向后台获取验证结果,找了好久,发现没有现成的框架可以使用,于是自己根据网上搜索到的资料,写了这个js脚本。
这个脚本目前对日和星期的判断还有点小问题,不过不影响使用。
以后如果有时间,继续完善这个脚本,废话不多说了,上代码:
function cronValidate() { var cron = $("#cron").val(); var result = CronExpressionValidator.validateCronExpression(cron); if(result == true){ alert("格式正确"); } else{ alert("格式错误"); } return CronExpressionValidator.validateCronExpression(cron); } function CronExpressionValidator() { } CronExpressionValidator.validateCronExpression = function(value) { var results = true; if (value == null || value.length == 0) { return false; } // split and test length var expressionArray = value.split(" "); var len = expressionArray.length; if ((len != 6) && (len != 7)) { return false; } // check only one question mark var match = value.match(/\?/g); if (match != null && match.length > 1) { return false; } // check only one question mark var dayOfTheMonthWildcard = ""; // if appropriate length test parts // [0] Seconds 0-59 , - * / if (CronExpressionValidator.isNotWildCard(expressionArray[0], /[\*]/gi)) { if (!CronExpressionValidator.segmentValidator("([0-9\\\\,-\\/])", expressionArray[0], [0, 59], "seconds")) { return false; } } // [1] Minutes 0-59 , - * / if (CronExpressionValidator.isNotWildCard(expressionArray[1], /[\*]/gi)) { if (!CronExpressionValidator.segmentValidator("([0-9\\\\,-\\/])", expressionArray[1], [0, 59], "minutes")) { return false; } } // [2] Hours 0-23 , - * / if (CronExpressionValidator.isNotWildCard(expressionArray[2], /[\*]/gi)) { if (!CronExpressionValidator.segmentValidator("([0-9\\\\,-\\/])", expressionArray[2], [0, 23], "hours")) { return false; } } // [3] Day of month 1-31 , - * ? / L W C if (CronExpressionValidator.isNotWildCard(expressionArray[3], /[\*\?]/gi)) { if (!CronExpressionValidator.segmentValidator("([0-9LWC\\\\,-\\/])", expressionArray[3], [1, 31], "days of the month")) { return false; } } else { dayOfTheMonthWildcard = expressionArray[3]; } // [4] Month 1-12 or JAN-DEC , - * / if (CronExpressionValidator.isNotWildCard(expressionArray[4], /[\*]/gi)) { expressionArray[4] = CronExpressionValidator.convertMonthsToInteger(expressionArray[4]); if (!CronExpressionValidator.segmentValidator("([0-9\\\\,-\\/])", expressionArray[4], [1, 12], "months")) { return false; } } // [5] Day of week 1-7 or SUN-SAT , - * ? / L C # if (CronExpressionValidator.isNotWildCard(expressionArray[5], /[\*\?]/gi)) { expressionArray[5] = CronExpressionValidator.convertDaysToInteger(expressionArray[5]); if (!CronExpressionValidator.segmentValidator("([0-9LC#\\\\,-\\/])", expressionArray[5], [1, 7], "days of the week")) { return false; } } else { if (dayOfTheMonthWildcard == String(expressionArray[5])) { return false; } } // [6] Year empty or 1970-2099 , - * / if (len == 7) { if (CronExpressionValidator.isNotWildCard(expressionArray[6], /[\*]/gi)) { if (!CronExpressionValidator.segmentValidator("([0-9\\\\,-\\/])", expressionArray[6], [1970, 2099], "years")) { return false; } } } return true; } // ---------------------------------- // isNotWildcard 静态方法; // ---------------------------------- CronExpressionValidator.isNotWildCard = function(value, expression) { var match = value.match(expression); return (match == null || match.length == 0) ? true : false; } // ---------------------------------- // convertDaysToInteger 静态方法; // ---------------------------------- CronExpressionValidator.convertDaysToInteger = function(value) { var v = value; v = v.replace(/SUN/gi, "1"); v = v.replace(/MON/gi, "2"); v = v.replace(/TUE/gi, "3"); v = v.replace(/WED/gi, "4"); v = v.replace(/THU/gi, "5"); v = v.replace(/FRI/gi, "6"); v = v.replace(/SAT/gi, "7"); return v; } // ---------------------------------- // convertMonthsToInteger 静态方法; // ---------------------------------- CronExpressionValidator.convertMonthsToInteger = function(value) { var v = value; v = v.replace(/JAN/gi, "1"); v = v.replace(/FEB/gi, "2"); v = v.replace(/MAR/gi, "3"); v = v.replace(/APR/gi, "4"); v = v.replace(/MAY/gi, "5"); v = v.replace(/JUN/gi, "6"); v = v.replace(/JUL/gi, "7"); v = v.replace(/AUG/gi, "8"); v = v.replace(/SEP/gi, "9"); v = v.replace(/OCT/gi, "10"); v = v.replace(/NOV/gi, "11"); v = v.replace(/DEC/gi, "12"); return v; } // ---------------------------------- // segmentValidator 静态方法; // ---------------------------------- CronExpressionValidator.segmentValidator = function(expression, value, range, segmentName) { var v = value; var numbers = new Array(); // first, check for any improper segments var reg = new RegExp(expression, "gi"); if (!reg.test(v)) { return false; } // check duplicate types // check only one L var dupMatch = value.match(/L/gi); if (dupMatch != null && dupMatch.length > 1) { return false; } // look through the segments // break up segments on ',' // check for special cases L,W,C,/,#,- var split = v.split(","); var i = -1; var l = split.length; var match; while (++i < l) { // set vars var checkSegment = split[i]; var n; var pattern = /(\w*)/; match = pattern.exec(checkSegment); // if just number pattern = /(\w*)\-?\d+(\w*)/; match = pattern.exec(checkSegment); if (match && match[0] == checkSegment && checkSegment.indexOf("L") == -1 && checkSegment.indexOf("l") == -1 && checkSegment.indexOf("C") == -1 && checkSegment.indexOf("c") == -1 && checkSegment.indexOf("W") == -1 && checkSegment.indexOf("w") == -1 && checkSegment.indexOf("/") == -1 && (checkSegment.indexOf("-") == -1 || checkSegment .indexOf("-") == 0) && checkSegment.indexOf("#") == -1) { n = match[0]; if (n && !(isNaN(n))) numbers.push(n); else if (match[0] == "0") numbers.push(n); continue; } // includes L, C, or w pattern = /(\w*)L|C|W(\w*)/i; match = pattern.exec(checkSegment); if (match && match[0] != "" && (checkSegment.indexOf("L") > -1 || checkSegment.indexOf("l") > -1 || checkSegment.indexOf("C") > -1 || checkSegment.indexOf("c") > -1 || checkSegment.indexOf("W") > -1 || checkSegment .indexOf("w") > -1)) { // check just l or L if (checkSegment == "L" || checkSegment == "l") continue; pattern = /(\w*)\d+(l|c|w)?(\w*)/i; match = pattern.exec(checkSegment); // if something before or after if (!match || match[0] != checkSegment) { continue; } // get the number var numCheck = match[0]; numCheck = numCheck.replace(/(l|c|w)/ig, ""); n = Number(numCheck); if (n && !(isNaN(n))) numbers.push(n); else if (match[0] == "0") numbers.push(n); continue; } var numberSplit; // includes / if (checkSegment.indexOf("/") > -1) { // take first # numberSplit = checkSegment.split("/"); if (numberSplit.length != 2) { continue; } else { n = numberSplit[0]; if (n && !(isNaN(n))) numbers.push(n); else if (numberSplit[0] == "0") numbers.push(n); continue; } } // includes # if (checkSegment.indexOf("#") > -1) { // take first # numberSplit = checkSegment.split("#"); if (numberSplit.length != 2) { continue; } else { n = numberSplit[0]; if (n && !(isNaN(n))) numbers.push(n); else if (numberSplit[0] == "0") numbers.push(n); continue; } } // includes - if (checkSegment.indexOf("-") > 0) { // take both # numberSplit = checkSegment.split("-"); if (numberSplit.length != 2) { continue; } else if (Number(numberSplit[0]) > Number(numberSplit[1])) { continue; } else { n = numberSplit[0]; if (n && !(isNaN(n))) numbers.push(n); else if (numberSplit[0] == "0") numbers.push(n); n = numberSplit[1]; if (n && !(isNaN(n))) numbers.push(n); else if (numberSplit[1] == "0") numbers.push(n); continue; } } } // lastly, check that all the found numbers are in range i = -1; l = numbers.length; if (l == 0) return false; while (++i < l) { // alert(numbers[i]); if (numbers[i] < range[0] || numbers[i] > range[1]) { return false; } } return true; }
위 내용은 Crontab 표현식이 적합한지 확인하기 위한 Javascript 샘플 코드에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











crontab 예약 작업이 실행되지 않는 몇 가지 이유 요약 업데이트 시간: 2019년 1월 9일 09:34:57 작성자: 현장에서 crontab 예약 작업이 실행되지 않는 몇 가지 이유를 주로 요약하고 소개합니다. 모두 이 문제에 직면한 동료를 위한 특정 참조 및 학습 가치가 있는 각 가능한 트리거에 대한 솔루션이 제공됩니다. 도움이 필요한 학생들은 편집자를 따라 함께 학습할 수 있습니다. 최근 직장에서 몇 가지 문제가 발생했습니다. 나중에 인터넷을 검색해 보니 인터넷에서 주로 다음과 같은 5가지 인센티브를 언급하고 있었습니다. 1. 크론드 서비스가 시작되지 않았습니다. 크론탭은 리눅스 커널의 기능이 아니고 크론에 의존합니다.

WebSocket 및 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법 소개: 지속적인 기술 개발로 음성 인식 기술은 인공 지능 분야의 중요한 부분이 되었습니다. WebSocket과 JavaScript를 기반으로 한 온라인 음성 인식 시스템은 낮은 대기 시간, 실시간, 크로스 플랫폼이라는 특징을 갖고 있으며 널리 사용되는 솔루션이 되었습니다. 이 기사에서는 WebSocket과 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법을 소개합니다.

WebSocket과 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술 서론: 인터넷 기술의 급속한 발전과 함께 실시간 모니터링 시스템이 다양한 분야에서 널리 활용되고 있다. 실시간 모니터링을 구현하는 핵심 기술 중 하나는 WebSocket과 JavaScript의 조합입니다. 이 기사에서는 실시간 모니터링 시스템에서 WebSocket 및 JavaScript의 적용을 소개하고 코드 예제를 제공하며 구현 원칙을 자세히 설명합니다. 1. 웹소켓 기술

WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법 오늘날의 디지털 시대에는 점점 더 많은 기업과 서비스에서 온라인 예약 기능을 제공해야 합니다. 효율적인 실시간 온라인 예약 시스템을 구현하는 것이 중요합니다. 이 기사에서는 WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. WebSocket이란 무엇입니까? WebSocket은 단일 TCP 연결의 전이중 방식입니다.

JavaScript 및 WebSocket을 사용하여 실시간 온라인 주문 시스템을 구현하는 방법 소개: 인터넷의 대중화와 기술의 발전으로 점점 더 많은 레스토랑에서 온라인 주문 서비스를 제공하기 시작했습니다. 실시간 온라인 주문 시스템을 구현하기 위해 JavaScript 및 WebSocket 기술을 사용할 수 있습니다. WebSocket은 TCP 프로토콜을 기반으로 하는 전이중 통신 프로토콜로 클라이언트와 서버 간의 실시간 양방향 통신을 실현할 수 있습니다. 실시간 온라인 주문 시스템에서는 사용자가 요리를 선택하고 주문을 하면

JavaScript 및 WebSocket: 효율적인 실시간 일기 예보 시스템 구축 소개: 오늘날 일기 예보의 정확성은 일상 생활과 의사 결정에 매우 중요합니다. 기술이 발전함에 따라 우리는 날씨 데이터를 실시간으로 획득함으로써 보다 정확하고 신뢰할 수 있는 일기예보를 제공할 수 있습니다. 이 기사에서는 JavaScript 및 WebSocket 기술을 사용하여 효율적인 실시간 일기 예보 시스템을 구축하는 방법을 알아봅니다. 이 문서에서는 특정 코드 예제를 통해 구현 프로세스를 보여줍니다. 우리

JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법, 특정 코드 예제가 필요합니다. 서문: 웹 개발에서는 서버와의 데이터 상호 작용이 종종 포함됩니다. 서버와 통신할 때 반환된 HTTP 상태 코드를 가져와서 작업의 성공 여부를 확인하고 다양한 상태 코드에 따라 해당 처리를 수행해야 하는 경우가 많습니다. 이 기사에서는 JavaScript를 사용하여 HTTP 상태 코드를 얻는 방법과 몇 가지 실용적인 코드 예제를 제공합니다. XMLHttpRequest 사용

사용법: JavaScript에서 insertBefore() 메서드는 DOM 트리에 새 노드를 삽입하는 데 사용됩니다. 이 방법에는 삽입할 새 노드와 참조 노드(즉, 새 노드가 삽입될 노드)라는 두 가지 매개 변수가 필요합니다.
