


Explication détaillée de l'exemple de code Javascript pour déterminer si une expression Crontab est légale
这篇文章主要介绍了详解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; }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Résumé de quelques raisons pour lesquelles les tâches planifiées crontab ne sont pas exécutées. Heure de mise à jour : 9 janvier 2019 09:34:57 Auteur : Hope on the field Cet article résume et vous présente principalement quelques raisons pour lesquelles les tâches planifiées crontab ne sont pas exécutées. tout le monde Des solutions sont données pour chacun des déclencheurs possibles, qui ont une certaine valeur de référence et d'apprentissage pour les collègues qui rencontrent ce problème. Les étudiants dans le besoin peuvent suivre l'éditeur pour apprendre ensemble. Préface : J'ai récemment rencontré des problèmes au travail. La tâche n'a pas été exécutée. Plus tard, lors d'une recherche sur Internet, j'ai découvert qu'Internet mentionnait principalement ces cinq incitations : 1. Le service crond n'est pas démarré n'est pas une fonction du noyau Linux, mais repose sur un cron.

Comment utiliser WebSocket et JavaScript pour mettre en œuvre un système de reconnaissance vocale en ligne Introduction : Avec le développement continu de la technologie, la technologie de reconnaissance vocale est devenue une partie importante du domaine de l'intelligence artificielle. Le système de reconnaissance vocale en ligne basé sur WebSocket et JavaScript présente les caractéristiques d'une faible latence, d'un temps réel et d'une multiplateforme, et est devenu une solution largement utilisée. Cet article explique comment utiliser WebSocket et JavaScript pour implémenter un système de reconnaissance vocale en ligne.

WebSocket et JavaScript : technologies clés pour réaliser des systèmes de surveillance en temps réel Introduction : Avec le développement rapide de la technologie Internet, les systèmes de surveillance en temps réel ont été largement utilisés dans divers domaines. L'une des technologies clés pour réaliser une surveillance en temps réel est la combinaison de WebSocket et de JavaScript. Cet article présentera l'application de WebSocket et JavaScript dans les systèmes de surveillance en temps réel, donnera des exemples de code et expliquera leurs principes de mise en œuvre en détail. 1. Technologie WebSocket

Comment utiliser WebSocket et JavaScript pour mettre en œuvre un système de réservation en ligne. À l'ère numérique d'aujourd'hui, de plus en plus d'entreprises et de services doivent fournir des fonctions de réservation en ligne. Il est crucial de mettre en place un système de réservation en ligne efficace et en temps réel. Cet article explique comment utiliser WebSocket et JavaScript pour implémenter un système de réservation en ligne et fournit des exemples de code spécifiques. 1. Qu'est-ce que WebSocket ? WebSocket est une méthode full-duplex sur une seule connexion TCP.

Introduction à l'utilisation de JavaScript et de WebSocket pour mettre en œuvre un système de commande en ligne en temps réel : avec la popularité d'Internet et les progrès de la technologie, de plus en plus de restaurants ont commencé à proposer des services de commande en ligne. Afin de mettre en œuvre un système de commande en ligne en temps réel, nous pouvons utiliser les technologies JavaScript et WebSocket. WebSocket est un protocole de communication full-duplex basé sur le protocole TCP, qui peut réaliser une communication bidirectionnelle en temps réel entre le client et le serveur. Dans le système de commande en ligne en temps réel, lorsque l'utilisateur sélectionne des plats et passe une commande

JavaScript et WebSocket : Construire un système efficace de prévisions météorologiques en temps réel Introduction : Aujourd'hui, la précision des prévisions météorologiques revêt une grande importance pour la vie quotidienne et la prise de décision. À mesure que la technologie évolue, nous pouvons fournir des prévisions météorologiques plus précises et plus fiables en obtenant des données météorologiques en temps réel. Dans cet article, nous apprendrons comment utiliser la technologie JavaScript et WebSocket pour créer un système efficace de prévisions météorologiques en temps réel. Cet article démontrera le processus de mise en œuvre à travers des exemples de code spécifiques. Nous

Tutoriel JavaScript : Comment obtenir le code d'état HTTP, des exemples de code spécifiques sont requis Préface : Dans le développement Web, l'interaction des données avec le serveur est souvent impliquée. Lors de la communication avec le serveur, nous devons souvent obtenir le code d'état HTTP renvoyé pour déterminer si l'opération a réussi et effectuer le traitement correspondant en fonction de différents codes d'état. Cet article vous apprendra comment utiliser JavaScript pour obtenir des codes d'état HTTP et fournira quelques exemples de codes pratiques. Utilisation de XMLHttpRequest

Introduction à la méthode d'obtention du code d'état HTTP en JavaScript : Dans le développement front-end, nous devons souvent gérer l'interaction avec l'interface back-end, et le code d'état HTTP en est une partie très importante. Comprendre et obtenir les codes d'état HTTP nous aide à mieux gérer les données renvoyées par l'interface. Cet article explique comment utiliser JavaScript pour obtenir des codes d'état HTTP et fournit des exemples de code spécifiques. 1. Qu'est-ce que le code d'état HTTP ? Le code d'état HTTP signifie que lorsque le navigateur lance une requête au serveur, le service
