Last active
November 2, 2017 01:02
-
-
Save ZLightning/71d44f5c5c91f241ff7d1c02615e9ea2 to your computer and use it in GitHub Desktop.
IPv6 Regex
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict'; | |
//JavaScript RegExp is compatible with Java as a string literal | |
//strict means :: compression will not be allowed for a single 16 bit 0 segment | |
var strictNonPaddedIPv6 = /^(?:(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){7}(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3})|(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){1,6}:|(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){1,5}:(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3})|(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){1,4}:(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:)(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3})|(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){1,3}:(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){2}(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3})|(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){1,2}:(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){3}(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3})|(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:):(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){4}(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3})|::(?:(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){0,6}(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}))?)$/ | |
//nonPadded means leading 0s in each segment are not allowed | |
var nonPaddedIPv6 = /^(?:(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){7}(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3})|(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){1,7}:|(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){1,6}:(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3})|(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){1,5}:(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:)(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3})|(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){1,4}:(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){2}(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3})|(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){1,3}:(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){3}(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3})|(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){1,2}:(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){4}(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3})|(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:):(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){5}(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3})|::(?:(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){0,6}(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}))?)$/ | |
//padded means all segments must be 4 digits long (:: compression not allowed) | |
var paddedIPv6 = /^(?:[0-9a-fA-F]{4}:){7}[0-9a-fA-F]{4}$/ | |
//all or none referrs to padding, :: compression not allowed on padded | |
var strictAllOrNoneIPv6 = /^(?:(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){7}(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3})|(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){1,6}:|(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){1,5}:(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3})|(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){1,4}:(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:)(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3})|(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){1,3}:(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){2}(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3})|(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){1,2}:(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){3}(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3})|(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:):(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){4}(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3})|::(?:(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){0,6}(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}))?|(?:[0-9a-fA-F]{4}:){7}[0-9a-fA-F]{4})$/ | |
var allOrNoneIPv6 = /^(?:(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){7}(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3})|(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){1,7}:|(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){1,6}:(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3})|(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){1,5}:(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:)(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3})|(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){1,4}:(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){2}(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3})|(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){1,3}:(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){3}(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3})|(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){1,2}:(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){4}(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3})|(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:):(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){5}(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3})|::(?:(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}:){0,6}(?:0(?![0-9a-fA-F])|[1-9a-fA-F][0-9a-fA-F]{0,3}))?|(?:[0-9a-fA-F]{4}:){7}[0-9a-fA-F]{4})$/ | |
//Matches all valid IPv6 addresses except IPv4 mapped IPv6 (like ::1.2.3.4 and ::ffff:1.2.3.4) | |
var IPv6 = /^(?:(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|(?:[0-9a-fA-F]{1,4}:){1,7}:|(?:[0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|(?:[0-9a-fA-F]{1,4}:){1,5}:(?:[0-9a-fA-F]{1,4}:)[0-9a-fA-F]{1,4}|(?:[0-9a-fA-F]{1,4}:){1,4}:(?:[0-9a-fA-F]{1,4}:){2}[0-9a-fA-F]{1,4}|(?:[0-9a-fA-F]{1,4}:){1,3}:(?:[0-9a-fA-F]{1,4}:){3}[0-9a-fA-F]{1,4}|(?:[0-9a-fA-F]{1,4}:){1,2}:(?:[0-9a-fA-F]{1,4}:){4}[0-9a-fA-F]{1,4}|(?:[0-9a-fA-F]{1,4}:){1,1}:(?:[0-9a-fA-F]{1,4}:){5}[0-9a-fA-F]{1,4}|::(?:(?:[0-9a-fA-F]{1,4}:){0,6}[0-9a-fA-F]{1,4})?)$/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment