private static boolean isIPv6Addr ( String host ) { if ( host != null ) { if ( host . contains ( "[" ) && host . contains ( "]" ) ) host = host . substring ( host . indexOf ( "[" ) + 1 , host . indexOf ( "]" ) ) ; host = host . toLowerCase ( ) ; Pattern p1 = Pattern . compile ( "^(?:(?:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9](?::|$)){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))$" ) ; Pattern p2 = Pattern . compile ( "^(\\d{1,3}\\.){3}\\d{1,3}$" ) ; Matcher m1 = p1 . matcher ( host ) ; boolean b1 = m1 . matches ( ) ; Matcher m2 = p2 . matcher ( host ) ; boolean b2 = ! m2 . matches ( ) ; return b1 && b2 ; } else { return false ; } }
Is the address an IPv6 Address .