/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠW illiam ĠSmith Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttps :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġpro . w smi . kw sm ilib . net Ċ Ċ /** Ċ Ġ* ĠRegex Ġpattern Ġof Ġipv 4 Ġformat Ċ Ġ*/ Ċ val Ġipv 4 Regex Ġ= ĠRegex ( pattern Ġ= Ġ" (( 2 5 [ 0 - 5 ] |( 2 [ 0 - 4 ]| 1 { 0 , 1 }[ 0 - 9 ]){ 0 , 1 }[ 0 - 9 ]) \\. ){ 3 , 3 }( 2 5 [ 0 - 5 ] |( 2 [ 0 - 4 ]| 1 { 0 , 1 }[ 0 - 9 ]){ 0 , 1 }[ 0 - 9 ]) ") Ċ Ċ /** Ċ Ġ* ĠRegex Ġpattern Ġof Ġipv 6 Ġformat Ċ Ġ*/ Ċ val Ġipv 6 Regex Ġ= ĠRegex ( pattern Ġ= Ġ""" ĊĠĠĠ Ġ( ĊĠĠĠ Ġ([ 0 - 9 a - fA - F ]{ 1 , 4 }: ){ 7 , 7 }[ 0 - 9 a - fA - F ]{ 1 , 4 }| ĊĠĠĠ Ġ([ 0 - 9 a - fA - F ]{ 1 , 4 }: ){ 1 , 7 }: | ĊĠĠĠ Ġ([ 0 - 9 a - fA - F ]{ 1 , 4 }: ){ 1 , 6 }: [ 0 - 9 a - fA - F ]{ 1 , 4 }| ĊĠĠĠ Ġ([ 0 - 9 a - fA - F ]{ 1 , 4 }: ){ 1 , 5 } (: [ 0 - 9 a - fA - F ]{ 1 , 4 } ){ 1 , 2 }| ĊĠĠĠ Ġ([ 0 - 9 a - fA - F ]{ 1 , 4 }: ){ 1 , 4 } (: [ 0 - 9 a - fA - F ]{ 1 , 4 } ){ 1 , 3 }| ĊĠĠĠ Ġ([ 0 - 9 a - fA - F ]{ 1 , 4 }: ){ 1 , 3 } (: [ 0 - 9 a - fA - F ]{ 1 , 4 } ){ 1 , 4 }| ĊĠĠĠ Ġ([ 0 - 9 a - fA - F ]{ 1 , 4 }: ){ 1 , 2 } (: [ 0 - 9 a - fA - F ]{ 1 , 4 } ){ 1 , 5 }| ĊĠĠĠ Ġ[ 0 - 9 a - fA - F ]{ 1 , 4 }: (( :[ 0 - 9 a - fA - F ]{ 1 , 4 } ){ 1 , 6 }) | ĊĠĠĠ Ġ: (( :[ 0 - 9 a - fA - F ]{ 1 , 4 } ){ 1 , 7 } |: )| ĊĠĠĠ Ġfe 8 0 :( :[ 0 - 9 a - fA - F ]{ 0 , 4 } ){ 0 , 4 }% [ 0 - 9 a - zA - Z ]{ 1 , }| ĊĠĠĠ Ġ:: ( ffff (: 0 { 1 , 4 } ){ 0 , 1 }: ){ 0 , 1 } ĊĠĠĠ Ġ(( 2 5 [ 0 - 5 ] |( 2 [ 0 - 4 ]| 1 { 0 , 1 }[ 0 - 9 ]){ 0 , 1 }[ 0 - 9 ]) \. ){ 3 , 3 } ĊĠĠĠ Ġ( 2 5 [ 0 - 5 ] |( 2 [ 0 - 4 ]| 1 { 0 , 1 }[ 0 - 9 ]){ 0 , 1 }[ 0 - 9 ]) | ĊĠĠĠ Ġ([ 0 - 9 a - fA - F ]{ 1 , 4 }: ){ 1 , 4 }: ĊĠĠĠ Ġ(( 2 5 [ 0 - 5 ] |( 2 [ 0 - 4 ]| 1 { 0 , 1 }[ 0 - 9 ]){ 0 , 1 }[ 0 - 9 ]) \. ){ 3 , 3 } ĊĠĠĠ Ġ( 2 5 [ 0 - 5 ] |( 2 [ 0 - 4 ]| 1 { 0 , 1 }[ 0 - 9 ]){ 0 , 1 }[ 0 - 9 ]) ĊĠĠĠ Ġ) Ċ """. trim Indent ()) Ċ Ċ /** Ċ Ġ* ĠRegex Ġpattern Ġof Ġdomain Ġname Ġformat Ċ Ġ*/ Ċ @ Suppress (" unused ") Ċ val Ġdomain Regex Ġ= ĠRegex ( pattern Ġ= Ġ"[ a - zA - Z 0 - 9 ]( - ?[ a - zA - Z 0 - 9 ]){ 1 , 6 3 }\\ .[ a - zA - Z ]{ 2 , 6 }") Ċ Ċ /** Ċ Ġ* ĠRegex Ġpattern Ġof Ġemail Ġaddress Ġformat Ċ Ġ*/ Ċ @ Suppress (" unused ") Ċ val Ġemail Address Regex Ġ= ĠRegex ( pattern Ġ= Ġ"( ?: [ a - z 0 - 9 ! # \$ % & '* +/ =? ^ _` { |} ~ - ]+ (?: \\ .[ a - z 0 - 9 ! # \$ % & '* +/ =? ^ _` { |} ~ - ]+ )* | \" (?: [ \\ x 0 1 - \\ x 0 8 \\ x 0 b \\ x 0 c \\ x 0 e - \\ x 1 f \\ x 2 1 \\ x 2 3 - \\ x 5 b \\ x 5 d - \\ x 7 f ]| \\\\ [ \\ x 0 1 - \\ x 0 9 \\ x 0 b \\ x 0 c \\ x 0 e - \\ x 7 f ]) *\ ") @ (?: (?: [ a - z 0 - 9 ]( ?: [ a - z 0 - 9 - ]* [ a - z 0 - 9 ]) ? \\. )+ [ a - z 0 - 9 ]( ?: [ a - z 0 - 9 - ]* [ a - z 0 - 9 ]) ?| \\ [( ?: (?: 2 5 [ 0 - 5 ]| 2 [ 0 - 4 ][ 0 - 9 ] |[ 0 1 ]? [ 0 - 9 ][ 0 - 9 ] ?) \\. ){ 3 }( ?: 2 5 [ 0 - 5 ]| 2 [ 0 - 4 ][ 0 - 9 ] |[ 0 1 ]? [ 0 - 9 ][ 0 - 9 ]? |[ a - z 0 - 9 - ]* [ a - z 0 - 9 ]: (?: [ \\ x 0 1 - \\ x 0 8 \\ x 0 b \\ x 0 c \\ x 0 e - \\ x 1 f \\ x 2 1 - \\ x 5 a \\ x 5 3 - \\ x 7 f ]| \\\\ [ \\ x 0 1 - \\ x 0 9 \\ x 0 b \\ x 0 c \\ x 0 e - \\ x 7 f ]) +) \\ ]) ") Ċ Ċ /** Ċ Ġ* ĠRegex Ġpattern Ġof Ġinternational Ġphone Ġnumber Ċ Ġ*/ Ċ @ Suppress (" unused ") Ċ val Ġinternational PhoneNumber Regex Ġ= ĠRegex ( pattern Ġ= Ġ"^ \\ + [ 1 - 9 ] Ġ? (\\ d { 1 , 3 }) ? Ġ? \\ (? \\ d [ 0 - 9 Ġ\\ (\\ )- ]{ 3 , }[ 0 - 9 \\ )] \$ ") Ċ Ċ /** Ċ Ġ* ĠRegex Ġpattern Ġof Ġabsolute ĠURL Ġformat Ċ Ġ*/ Ċ val ĠURL Regex Ġ= ĠRegex ( pattern Ġ= Ġ"^ (? < protocol >[ a - zA - Z 0 - 9 ][ a - zA - Z 0 - 9 \\ - ]{ 1 , 1 9 }): \\/ \\/ (( ?< username >[ a - zA - Z 0 - 9 _- ]+ )( :( ?< password >[ a - zA - Z 0 - 9 &# @ <> Â° \$ Â £ % * Â µ Â§ ?= + _- ]+ )) ? @ )? (? < host >(( [ a - zA - Z 0 - 9 ]( - ?[ a - zA - Z 0 - 9 ]){ 0 , 6 3 }\\ . )* [ a - zA - Z 0 - 9 ]( - ?[ a - zA - Z 0 - 9 ]){ 1 , 6 3 }\\ .[ a - zA - Z ]{ 2 , 6 }) | (${ ipv 4 Regex . pattern }) |( \\ [ ${ ipv 6 Regex . pattern }\\ ])) ( :( ?< port >[ 1 - 9 ][ 0 - 9 ]{ 1 , 4 })) ?( ?< path > \\ /[ a - zA - Z 0 - 9 % \\ /. ?= &# ]*) ?\ $ ")