@@ -26,7 +26,7 @@ export class CronParser {
26
26
*/
27
27
parse ( ) : string [ ] {
28
28
let parsed : string [ ] ;
29
-
29
+
30
30
var expression = this . expression ?? '' ;
31
31
32
32
if ( expression . startsWith ( '@' ) ) {
@@ -316,12 +316,22 @@ export class CronParser {
316
316
}
317
317
318
318
protected validate ( parsed : string [ ] ) {
319
- this . assertNoInvalidCharacters ( "DOW" , parsed [ 5 ] ) ;
320
- this . assertNoInvalidCharacters ( "DOM" , parsed [ 3 ] ) ;
321
- this . validateRange ( parsed ) ;
319
+ const standardCronPartCharacters = "0-9,\\-*\/" ;
320
+ this . validateOnlyExpectedCharactersFound ( parsed [ 0 ] , standardCronPartCharacters ) ;
321
+ this . validateOnlyExpectedCharactersFound ( parsed [ 1 ] , standardCronPartCharacters ) ;
322
+ this . validateOnlyExpectedCharactersFound ( parsed [ 2 ] , standardCronPartCharacters ) ;
323
+ // DOM
324
+ this . validateOnlyExpectedCharactersFound ( parsed [ 3 ] , "0-9,\\-*\/LW" ) ;
325
+ this . validateOnlyExpectedCharactersFound ( parsed [ 4 ] , standardCronPartCharacters ) ;
326
+ // DOW
327
+ this . validateOnlyExpectedCharactersFound ( parsed [ 5 ] , "0-9,\\-*\/L#" ) ;
328
+ this . validateOnlyExpectedCharactersFound ( parsed [ 6 ] , standardCronPartCharacters ) ;
329
+
330
+ this . validateAnyRanges ( parsed ) ;
331
+
322
332
}
323
333
324
- protected validateRange ( parsed : string [ ] ) {
334
+ protected validateAnyRanges ( parsed : string [ ] ) {
325
335
RangeValidator . secondRange ( parsed [ 0 ] ) ;
326
336
RangeValidator . minuteRange ( parsed [ 1 ] ) ;
327
337
RangeValidator . hourRange ( parsed [ 2 ] ) ;
@@ -330,11 +340,12 @@ export class CronParser {
330
340
RangeValidator . dayOfWeekRange ( parsed [ 5 ] , this . dayOfWeekStartIndexZero ) ;
331
341
}
332
342
333
- protected assertNoInvalidCharacters ( partDescription : string , expression : string ) {
334
- // No characters other than 'L' or 'W' should remain after normalization
335
- let invalidChars = expression . match ( / [ A - K M - V X - Z ] + / gi) ;
343
+ protected validateOnlyExpectedCharactersFound ( cronPart : string , allowedCharsExpression : string ) {
344
+ // Write code that will ensure the expression string only contains numbers or any of the following characters , - * /
345
+ // If any other characters are found, it is an error.
346
+ let invalidChars = cronPart . match ( new RegExp ( `[^${ allowedCharsExpression } ]+` , "gi" ) ) ;
336
347
if ( invalidChars && invalidChars . length ) {
337
- throw new Error ( `${ partDescription } part contains invalid values: '${ invalidChars . toString ( ) } '` ) ;
348
+ throw new Error ( `Expression contains invalid values: '${ invalidChars . toString ( ) } '` ) ;
338
349
}
339
350
}
340
351
}
0 commit comments