Modulo:IP validator
La documentazione per questo modulo può essere creata in Modulo:IP validator/man
local str = {}
--[[
is_ipv4
Questa funzione ritorna '1' o '0' a seconda che la stringa in input corrisponda o meno allo standard IPv4.
Uso:
{{#invoke:IP validator|is_ipv4|stringa}}
]]
function str.is_ipv4( frame )
local s = frame.args[1] or '';
s = s:gsub("/[0-9]$", ""):gsub("/[12][0-9]$", ""):gsub("/[3][0-2]$", "")
if not s:find("^%d+%.%d+%.%d+%.%d+$") then
return '0'
end
for substr in s:gmatch("(%d+)") do
if not substr:find("^[1-9]?[0-9]$")
and not substr:find("^1[0-9][0-9]$")
and not substr:find( "^2[0-4][0-9]$")
and not substr:find("^25[0-5]$") then
return '0'
end
end
return '1';
end
--[[
is_ipv6
Questa funzione ritorna '1' o '0' a seconda che la stringa in input corrisponda o meno allo standard IPv6.
Uso:
{{#invoke:IP validator|is_ipv6|stringa}}
]]
function str.is_ipv6( frame )
local s = frame.args[1] or '';
if not (s:find("^%w+:%w+:%w+:%w+:%w+:%w+:%w+:%w+$") -- caso in cui ci sono esattamente sette ":"
or (s:find("^%w*:%w*:%w*:?%w*:?%w*:?%w*:?%w*$") -- altrimenti devono esserci fra i due e i sei ":"
and s:find("::"))) -- e dev'esserci la sottostringa "::"
or s:find("::.*::") -- ma non possono mai esserci due sottostringhe "::"
or s:find(":::") then -- né una sottostringa ":::"
return '0'
end
for substr in s:gmatch("(%w+)") do
if not substr:find("^[0-9A-Fa-f][0-9A-Fa-f]?[0-9A-Fa-f]?[0-9A-Fa-f]?$") then
return '0'
end
end
return '1';
end
--[[
is_ip
Questa funzione ritorna '1' o '0' a seconda che la stringa in input corrisponda o meno allo standard IPv4 o IPv6.
Uso:
{{#invoke:IP validator|is_ip|stringa}}
]]
function str.is_ip( frame )
local ipv4 = str.is_ipv4( frame ) == '1';
local ipv6 = str.is_ipv6( frame ) == '1';
if ipv4 or ipv6 then
return '1';
else
return '0';
end
end
return str