@@ -23,8 +23,8 @@ const { Duplex } = require("node:stream");
2323const EventEmitter = require ( "node:events" ) ;
2424
2525// IPv4 Segment
26- const v4Seg = "(?:[0-9]|[1-9 ][0-9]|1[0-9][0-9]|2[0-4 ][0-9]|25 [0-5 ])" ;
27- const v4Str = `(${ v4Seg } [.] ){3}${ v4Seg } ` ;
26+ const v4Seg = "(?:25 [0-5]|2[0-4 ][0-9]|1[0-9][0-9]|[1-9 ][0-9]|[0-9 ])" ;
27+ const v4Str = `(?: ${ v4Seg } \\. ){3}${ v4Seg } ` ;
2828var IPv4Reg ;
2929
3030// IPv6 Segment
@@ -37,16 +37,16 @@ function isIPv4(s) {
3737
3838function isIPv6 ( s ) {
3939 return ( IPv6Reg ??= new RegExp (
40- "^(" +
40+ "^(?: " +
4141 `(?:${ v6Seg } :){7}(?:${ v6Seg } |:)|` +
4242 `(?:${ v6Seg } :){6}(?:${ v4Str } |:${ v6Seg } |:)|` +
43- `(?:${ v6Seg } :){5}(?::${ v4Str } |(:${ v6Seg } ){1,2}|:)|` +
44- `(?:${ v6Seg } :){4}(?:(: ${ v6Seg } ){0,1}:${ v4Str } |(:${ v6Seg } ){1,3}|:)|` +
45- `(?:${ v6Seg } :){3}(?:(: ${ v6Seg } ){0,2}:${ v4Str } |(:${ v6Seg } ){1,4}|:)|` +
46- `(?:${ v6Seg } :){2}(?:(: ${ v6Seg } ){0,3}:${ v4Str } |(:${ v6Seg } ){1,5}|:)|` +
47- `(?:${ v6Seg } :){1}(?:(: ${ v6Seg } ){0,4}:${ v4Str } |(:${ v6Seg } ){1,6}|:)|` +
48- `(?::((?::${ v6Seg } ){0,5}:${ v4Str } |(?::${ v6Seg } ){1,7}|:))` +
49- ")(%[0-9a-zA-Z-.:]{1,})?$" ,
43+ `(?:${ v6Seg } :){5}(?::${ v4Str } |(?: :${ v6Seg } ){1,2}|:)|` +
44+ `(?:${ v6Seg } :){4}(?:(?:: ${ v6Seg } ){0,1}:${ v4Str } |(?: :${ v6Seg } ){1,3}|:)|` +
45+ `(?:${ v6Seg } :){3}(?:(?:: ${ v6Seg } ){0,2}:${ v4Str } |(?: :${ v6Seg } ){1,4}|:)|` +
46+ `(?:${ v6Seg } :){2}(?:(?:: ${ v6Seg } ){0,3}:${ v4Str } |(?: :${ v6Seg } ){1,5}|:)|` +
47+ `(?:${ v6Seg } :){1}(?:(?:: ${ v6Seg } ){0,4}:${ v4Str } |(?: :${ v6Seg } ){1,6}|:)|` +
48+ `(?::(?: (?::${ v6Seg } ){0,5}:${ v4Str } |(?::${ v6Seg } ){1,7}|:))` +
49+ ")(?: %[0-9a-zA-Z-.:]{1,})?$" ,
5050 ) ) . test ( s ) ;
5151}
5252
0 commit comments