39 lines
1.8 KiB
JavaScript
39 lines
1.8 KiB
JavaScript
// A valid internet domain, according to https://stackoverflow.com/a/20046959 (cleaned)
|
|
const S_RE_DOMAIN = "(?:[a-zA-Z]|[a-zA-Z][a-zA-Z]|[a-zA-Z]\\d|\\d[a-zA-Z]|[a-zA-Z0-9][a-zA-Z0-9-_]{1,61}[a-zA-Z0-9])\\.(?:[a-zA-Z]{2,6}|[a-zA-Z0-9-]{2,30}\\.[a-zA-Z]{2,3})"
|
|
|
|
// A valid ipv4 address, one that doesn't check for valid numbers (e.g. not 999) and one that does
|
|
// const S_RE_IPV4_NO_CHECK = "(?:(?:\\d{1,3}\\.){3}\\d{1,3})"
|
|
const S_RE_IPV4_HAS_CHECK = "(?:(?:25[0-5]|(?:2[0-4]|1{0,1}\\d){0,1}\\d)\\.){3}(?:25[0-5]|(?:2[0-4]|1{0,1}\\d){0,1}\\d)"
|
|
|
|
const S_RE_IPV6_SEG = "[a-fA-F\\d]{1,4}"
|
|
// Yes, this is an ipv6 address.
|
|
const S_RE_IPV6 = `
|
|
(?:
|
|
(?:${S_RE_IPV6_SEG}:){7}(?:${S_RE_IPV6_SEG}|:)|
|
|
(?:${S_RE_IPV6_SEG}:){6}(?:${S_RE_IPV4_HAS_CHECK}|:${S_RE_IPV6_SEG}|:)|
|
|
(?:${S_RE_IPV6_SEG}:){5}(?::${S_RE_IPV4_HAS_CHECK}|(?::${S_RE_IPV6_SEG}){1,2}|:)|
|
|
(?:${S_RE_IPV6_SEG}:){4}(?:(?::${S_RE_IPV6_SEG}){0,1}:${S_RE_IPV4_HAS_CHECK}|(?::${S_RE_IPV6_SEG}){1,3}|:)|
|
|
(?:${S_RE_IPV6_SEG}:){3}(?:(?::${S_RE_IPV6_SEG}){0,2}:${S_RE_IPV4_HAS_CHECK}|(?::${S_RE_IPV6_SEG}){1,4}|:)|
|
|
(?:${S_RE_IPV6_SEG}:){2}(?:(?::${S_RE_IPV6_SEG}){0,3}:${S_RE_IPV4_HAS_CHECK}|(?::${S_RE_IPV6_SEG}){1,5}|:)|
|
|
(?:${S_RE_IPV6_SEG}:){1}(?:(?::${S_RE_IPV6_SEG}){0,4}:${S_RE_IPV4_HAS_CHECK}|(?::${S_RE_IPV6_SEG}){1,6}|:)|
|
|
(?::(?:(?::${S_RE_IPV6_SEG}){0,5}:${S_RE_IPV4_HAS_CHECK}|(?::${S_RE_IPV6_SEG}){1,7}|:))
|
|
)(?:%[0-9a-zA-Z]{1,})?`
|
|
.replace(/\s*\/\/.*$/gm, '')
|
|
.replace(/\n/g, '')
|
|
.trim();
|
|
|
|
const RE_DOMAIN_EXACT = new RegExp(`^${S_RE_DOMAIN}$`)
|
|
const RE_IPV4_EXACT = new RegExp(`^${S_RE_IPV4_HAS_CHECK}$`)
|
|
const RE_IPV6_EXACT = new RegExp(`^${S_RE_IPV6}$`)
|
|
const RE_IP_ADDR_EXACT = new RegExp(`^${S_RE_IPV6}|${S_RE_IPV4_HAS_CHECK}$`)
|
|
|
|
module.exports = {
|
|
S_RE_DOMAIN,
|
|
S_RE_IPV6,
|
|
S_RE_IPV4: S_RE_IPV4_HAS_CHECK,
|
|
RE_DOMAIN_EXACT,
|
|
RE_IPV4_EXACT,
|
|
RE_IPV6_EXACT,
|
|
RE_IP_ADDR_EXACT
|
|
}
|