maths.is_ipv6_address_valid¶
Validate IPv6 addresses (full and compressed forms).
References: - Wikipedia: https://en.wikipedia.org/wiki/IPv6_address - RFC 4291: https://tools.ietf.org/html/rfc4291
Rules implemented (subset of RFC 4291): - Hex groups are 1-4 hex digits (0-9, a-f, A-F). - Exactly 8 groups in total. A single ‘::’ may compress one or more groups of
zeros. No more than one ‘::’ is allowed.
No leading/trailing single ‘:’ (e.g., ‘:1:2::’ is invalid).
Does NOT support IPv4-mapped endings like ‘::ffff:192.0.2.128’.
Examples (doctests):
>>> is_ipv6_address_valid("2001:0db8:85a3:0000:0000:8a2e:0370:7334")
True
>>> is_ipv6_address_valid("2001:db8:85a3:0:0:8A2E:0370:7334")
True
>>> is_ipv6_address_valid("2001:db8:85a3::8A2E:0370:7334") # '::' compresses two groups
True
>>> is_ipv6_address_valid("::1") # loopback, 7 groups compressed
True
>>> is_ipv6_address_valid("2001:db8::") # trailing compression is OK
True
>>> is_ipv6_address_valid("::") # all groups compressed
True
Invalids:
>>> is_ipv6_address_valid("") # empty
False
>>> is_ipv6_address_valid("2001:db8:85a3:::8a2e:370:7334") # multiple '::'
False
>>> is_ipv6_address_valid("2001:db8:85a3:0:0:8a2e:370:7334:abcd") # 9 groups
False
>>> is_ipv6_address_valid("2001:db8:85a3:0:0:8a2e:0370:g334") # non-hex char
False
>>> is_ipv6_address_valid("2001:db8:85a3:0:0:8a2e:0370:") # trailing ':'
False
>>> is_ipv6_address_valid(":2001:db8::1") # leading ':'
False
>>> is_ipv6_address_valid("a::b:c:d:e:f:g:h") # '::' compresses zero groups (already 8)
False
>>> is_ipv6_address_valid("1::1:1:1:1:1:1:1") # same idea; zero groups compressed
False
Attributes¶
Functions¶
|
Return True iff group is 1-4 hex digits. |
|
Return True iff address is a valid IPv6 address in full or compressed form. |
Module Contents¶
- maths.is_ipv6_address_valid._is_valid_group(group: str) bool¶
Return True iff group is 1-4 hex digits. Args:
group (str): The hex group to validate.
- Returns:
bool: True if the group is 1-4 hex digits, False otherwise.
Examples:
>>> _is_valid_group("1") True >>> _is_valid_group("abcd") True >>> _is_valid_group("12345") # too long False >>> _is_valid_group("g") # non-hex character False
- maths.is_ipv6_address_valid.is_ipv6_address_valid(address: str) bool¶
Return True iff address is a valid IPv6 address in full or compressed form.
See module docstring for rules and doctests.
- maths.is_ipv6_address_valid._HEX_DIGITS¶
- maths.is_ipv6_address_valid.ip¶