Module:IPAddress: Difference between revisions

Jump to navigation Jump to search
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)
local modip = require('Module:IP')
return p._isIpOrRange(input(frame))
local s = input(frame)
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


return p
return p