@@ -62,7 +62,7 @@ export const fullFormats: DefinedFormats = {
62
62
hostname :
63
63
/ ^ (? = .{ 1 , 253 } \. ? $ ) [ a - z 0 - 9 ] (?: [ a - z 0 - 9 - ] { 0 , 61 } [ a - z 0 - 9 ] ) ? (?: \. [ a - z 0 - 9 ] (?: [ - 0 - 9 a - z ] { 0 , 61 } [ 0 - 9 a - z ] ) ? ) * \. ? $ / i,
64
64
// optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html
65
- ipv4 : / ^ (?: (?: 2 5 [ 0 - 5 ] | 2 [ 0 - 4 ] \d | [ 0 1 ] ? \d \d ? ) \. ) { 3 } (?: 2 5 [ 0 - 5 ] | 2 [ 0 - 4 ] \d | [ 0 1 ] ? \d \d ? ) $ / ,
65
+ ipv4 : / ^ (?: (?: 2 5 [ 0 - 5 ] | 2 [ 0 - 4 ] \d | 1 \d \d | [ 1 - 9 ] ? \d ) \. ) { 3 } (?: 2 5 [ 0 - 5 ] | 2 [ 0 - 4 ] \d | 1 \d \d | [ 1 - 9 ] ? \d ) $ / ,
66
66
ipv6 : / ^ ( ( ( [ 0 - 9 a - f ] { 1 , 4 } : ) { 7 } ( [ 0 - 9 a - f ] { 1 , 4 } | : ) ) | ( ( [ 0 - 9 a - f ] { 1 , 4 } : ) { 6 } ( : [ 0 - 9 a - f ] { 1 , 4 } | ( ( 2 5 [ 0 - 5 ] | 2 [ 0 - 4 ] \d | 1 \d \d | [ 1 - 9 ] ? \d ) ( \. ( 2 5 [ 0 - 5 ] | 2 [ 0 - 4 ] \d | 1 \d \d | [ 1 - 9 ] ? \d ) ) { 3 } ) | : ) ) | ( ( [ 0 - 9 a - f ] { 1 , 4 } : ) { 5 } ( ( ( : [ 0 - 9 a - f ] { 1 , 4 } ) { 1 , 2 } ) | : ( ( 2 5 [ 0 - 5 ] | 2 [ 0 - 4 ] \d | 1 \d \d | [ 1 - 9 ] ? \d ) ( \. ( 2 5 [ 0 - 5 ] | 2 [ 0 - 4 ] \d | 1 \d \d | [ 1 - 9 ] ? \d ) ) { 3 } ) | : ) ) | ( ( [ 0 - 9 a - f ] { 1 , 4 } : ) { 4 } ( ( ( : [ 0 - 9 a - f ] { 1 , 4 } ) { 1 , 3 } ) | ( ( : [ 0 - 9 a - f ] { 1 , 4 } ) ? : ( ( 2 5 [ 0 - 5 ] | 2 [ 0 - 4 ] \d | 1 \d \d | [ 1 - 9 ] ? \d ) ( \. ( 2 5 [ 0 - 5 ] | 2 [ 0 - 4 ] \d | 1 \d \d | [ 1 - 9 ] ? \d ) ) { 3 } ) ) | : ) ) | ( ( [ 0 - 9 a - f ] { 1 , 4 } : ) { 3 } ( ( ( : [ 0 - 9 a - f ] { 1 , 4 } ) { 1 , 4 } ) | ( ( : [ 0 - 9 a - f ] { 1 , 4 } ) { 0 , 2 } : ( ( 2 5 [ 0 - 5 ] | 2 [ 0 - 4 ] \d | 1 \d \d | [ 1 - 9 ] ? \d ) ( \. ( 2 5 [ 0 - 5 ] | 2 [ 0 - 4 ] \d | 1 \d \d | [ 1 - 9 ] ? \d ) ) { 3 } ) ) | : ) ) | ( ( [ 0 - 9 a - f ] { 1 , 4 } : ) { 2 } ( ( ( : [ 0 - 9 a - f ] { 1 , 4 } ) { 1 , 5 } ) | ( ( : [ 0 - 9 a - f ] { 1 , 4 } ) { 0 , 3 } : ( ( 2 5 [ 0 - 5 ] | 2 [ 0 - 4 ] \d | 1 \d \d | [ 1 - 9 ] ? \d ) ( \. ( 2 5 [ 0 - 5 ] | 2 [ 0 - 4 ] \d | 1 \d \d | [ 1 - 9 ] ? \d ) ) { 3 } ) ) | : ) ) | ( ( [ 0 - 9 a - f ] { 1 , 4 } : ) { 1 } ( ( ( : [ 0 - 9 a - f ] { 1 , 4 } ) { 1 , 6 } ) | ( ( : [ 0 - 9 a - f ] { 1 , 4 } ) { 0 , 4 } : ( ( 2 5 [ 0 - 5 ] | 2 [ 0 - 4 ] \d | 1 \d \d | [ 1 - 9 ] ? \d ) ( \. ( 2 5 [ 0 - 5 ] | 2 [ 0 - 4 ] \d | 1 \d \d | [ 1 - 9 ] ? \d ) ) { 3 } ) ) | : ) ) | ( : ( ( ( : [ 0 - 9 a - f ] { 1 , 4 } ) { 1 , 7 } ) | ( ( : [ 0 - 9 a - f ] { 1 , 4 } ) { 0 , 5 } : ( ( 2 5 [ 0 - 5 ] | 2 [ 0 - 4 ] \d | 1 \d \d | [ 1 - 9 ] ? \d ) ( \. ( 2 5 [ 0 - 5 ] | 2 [ 0 - 4 ] \d | 1 \d \d | [ 1 - 9 ] ? \d ) ) { 3 } ) ) | : ) ) ) $ / i,
67
67
regex,
68
68
// uuid: http://tools.ietf.org/html/rfc4122
@@ -149,7 +149,7 @@ function compareDate(d1: string, d2: string): number | undefined {
149
149
return 0
150
150
}
151
151
152
- const TIME = / ^ ( \d \d ) : ( \d \d ) : ( \d \d (?: \. \d + ) ? ) ( z | ( [ + - ] \d \d ) (?: : ? ( \d \d ) ) ? ) ? $ / i
152
+ const TIME = / ^ ( \d \d ) : ( \d \d ) : ( \d \d (?: \. \d + ) ? ) ( z | ( [ + - ] ) ( \d \d ) (?: : ? ( \d \d ) ) ? ) ? $ / i
153
153
154
154
function time ( str : string , withTimeZone ?: boolean , strictTime ?: boolean ) : boolean {
155
155
const matches : string [ ] | null = TIME . exec ( str )
@@ -158,14 +158,15 @@ function time(str: string, withTimeZone?: boolean, strictTime?: boolean): boolea
158
158
const min : number = + matches [ 2 ]
159
159
const sec : number = + matches [ 3 ]
160
160
const tz : string | undefined = matches [ 4 ]
161
- const tzH : number = + ( matches [ 5 ] || 0 )
162
- const tzM : number = + ( matches [ 6 ] || 0 )
163
- return (
164
- ( ( hr <= 23 && min <= 59 && sec < 60 && tzH <= 24 && tzM < 60 ) ||
165
- // leap second
166
- ( hr - tzH === 23 && min - tzM === 59 && sec < 61 && tzH <= 24 && tzM < 60 ) ) &&
167
- ( ! withTimeZone || ( tz !== "" && ( ! strictTime || ! ! tz ) ) )
168
- )
161
+ const tzSign : number = matches [ 5 ] === "-" ? - 1 : 1
162
+ const tzH : number = + ( matches [ 6 ] || 0 )
163
+ const tzM : number = + ( matches [ 7 ] || 0 )
164
+ if ( tzH > 23 || tzM > 59 || ( withTimeZone && ( tz === "" || ( strictTime && ! tz ) ) ) ) return false
165
+ if ( hr <= 23 && min <= 59 && sec < 60 ) return true
166
+ // leap second
167
+ const utcMin = min - tzM * tzSign
168
+ const utcHr = hr - tzH * tzSign - ( utcMin < 0 ? 1 : 0 )
169
+ return ( utcHr === 23 || utcHr === - 1 ) && ( utcMin === 59 || utcMin === - 1 ) && sec < 61
169
170
}
170
171
171
172
function strict_time ( str : string ) : boolean {
0 commit comments