Module:IPAddress: Difference between revisions
Jump to navigation
Jump to search
Richardpruen (talk | contribs) m (1 revision imported) |
imported>Trialpears (Add isIpV4Range and isIpV6Range) |
||
Line 29: | Line 29: | ||
function p._isIp(s) | function p._isIp(s) | ||
return p._isIpV4(s) and "4" or p._isIpV6(s) and "6" | return p._isIpV4(s) and "4" or p._isIpV6(s) and "6" | ||
end | |||
function p._isIpV4Range(s) | |||
return p._isIpV4(s:gsub("/%d+$", "")) and (p._isIpOrRange(s) == 'range') | |||
end | |||
function p._isIpV6Range(s) | |||
return p._isIpV6(s:gsub("/%d+$", "")) and (p._isIpOrRange(s) == 'range') | |||
end | |||
function p._isIpOrRange(s) | |||
local modip = require('Module:IP') | |||
local success, ip = pcall(modip.IPAddress.new, s) | |||
if success then | |||
return 'ip' | |||
end | |||
success, ip = pcall(modip.Subnet.new, s) | |||
if success then | |||
return 'range' | |||
end | |||
return '' | |||
end | end | ||
Line 42: | Line 63: | ||
function p.isIpV6(frame) return p._isIpV6(input(frame)) and "1" or "0" end | function p.isIpV6(frame) return p._isIpV6(input(frame)) and "1" or "0" end | ||
function p.isIpV4(frame) return p._isIpV4(input(frame)) and "1" or "0" end | function p.isIpV4(frame) return p._isIpV4(input(frame)) and "1" or "0" end | ||
function p.isIpV6Range(frame) return p._isIpV6Range(input(frame)) and "1" or "0" end | |||
function p.isIpV4Range(frame) return p._isIpV4Range(input(frame)) and "1" or "0" end | |||
function p.isIp(frame) return p._isIp(input(frame)) or "" end | function p.isIp(frame) return p._isIp(input(frame)) or "" end | ||
function p.isIpOrRange(frame) | function p.isIpOrRange(frame) | ||
-- {{#invoke:IPAddress|isIpOrRange|x}} → 'ip' (IPv4/IPv6) or 'range' (CIDR IPv4/IPv6) or '' (invalid) | -- {{#invoke:IPAddress|isIpOrRange|x}} → 'ip' (IPv4/IPv6) or 'range' (CIDR IPv4/IPv6) or '' (invalid) | ||
return p._isIpOrRange(input(frame)) | |||
end | end | ||
return p | return p |