Modulo:IP validator
Istruzioni per l'uso
Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:IP validator/man (modifica · cronologia)
Sandbox: Modulo:IP validator/sandbox (modifica · cronologia) · Sottopagine: lista · Test: Modulo:IP validator/test (modifica · cronologia · Esegui)
Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:IP validator/man (modifica · cronologia)
Sandbox: Modulo:IP validator/sandbox (modifica · cronologia) · Sottopagine: lista · Test: Modulo:IP validator/test (modifica · cronologia · Esegui)
Modulo per verificare se una data stringa rappresenta un indirizzo IP valido. Il template corrispondente è Template:IP?.
Le funzioni disponibili sono is_ipv4
, is_ipv6
e is_ip
da usare per convalidare, rispettivamente, secondo lo standard IPv4, IPv6 o uno dei due indistintamente. Non è prevista la convalida di IPv4-mapped address né di IPv4-compatible address.
Di seguito alcuni esempi d'uso:
Funzione | Stringa da analizzare | Codice da usare | Risultato |
---|---|---|---|
is_ipv4
|
0.0.0.0 | {{#invoke:IP validator|is_ipv4|0.0.0.0}} | 1 |
93.2.50.255 | {{#invoke:IP validator|is_ipv4|93.2.50.255}} | 1 | |
93.2.50.256 | {{#invoke:IP validator|is_ipv4|93.2.50.256}} | ||
93.2.50 | {{#invoke:IP validator|is_ipv4|93.2.50}} | ||
A.2.50.255 | {{#invoke:IP validator|is_ipv4|A.2.50.255}} | ||
is_ipv6
|
2001:13:A1B:90F:512:FFFF:88:AF3 | {{#invoke:IP validator|is_ipv6|2001:13:A1B:90F:512:FFFF:88:AF3}} | 1 |
4:4:4:4:4:4:4:4 | {{#invoke:IP validator|is_ipv6|4:4:4:4:4:4:4:4}} | 1 | |
2001:13:A1B::FFFF:AF3 | {{#invoke:IP validator|is_ipv6|2001:13:A1B::FFFF:AF3}} | 1 | |
2001:13:A1B:90F::FFFF:88:AF3 | {{#invoke:IP validator|is_ipv6|2001:13:A1B:90F::FFFF:88:AF3}} | ||
2001::90F::FFFF:88:AF3 | {{#invoke:IP validator|is_ipv6|2001::90F::FFFF:88:AF3}} | ||
2001:13:A1B:90F:512:FFFF:88 | {{#invoke:IP validator|is_ipv6|2001:13:A1B:90F:512:FFFF:88}} | ||
2001.13.A1B.90F.512.FFFF.88.AF3 | {{#invoke:IP validator|is_ipv6|2001.13.A1B.90F.512.FFFF.88.AF3}} | ||
is_ip
|
1.2.3.4 | {{#invoke:IP validator|is_ip|1.2.3.4}} | 1 |
2001:13:A1B:90F:512:FFFF:88:AF3 | {{#invoke:IP validator|is_ip|2001:13:A1B:90F:512:FFFF:88:AF3}} | 1 | |
4:4:4:4 | {{#invoke:IP validator|is_ip|4:4:4:4}} | ||
test | {{#invoke:IP validator|is_ip|test}} |
--[[
* Questo modulo serve per validare un indirizzo IP.
* È necessario un algoritmo iterativo in quanto le espressioni regolari di Lua non sono sufficientemente espressive.
]]
local p = {}
-- =============================================================================
-- Funzioni per moduli
-- =============================================================================
-- Questa funzione ritorna '1' se la stringa in input corrisponde allo standard IPv4, altrimenti un valore nullo.
function p._is_ipv4(s)
s = s:gsub("/[0-9]$", ""):gsub("/[12][0-9]$", ""):gsub("/[3][0-2]$", "")
if not s:find("^%d+%.%d+%.%d+%.%d+$") then
return nil
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 nil
end
end
return '1'
end
-- Questa funzione ritorna '1' se la stringa in input corrisponde allo standard IPv6, altrimenti un valore nullo.
function p._is_ipv6(s)
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 nil
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 nil
end
end
return '1'
end
-- Questa funzione ritorna '1' se la stringa in input corrisponde allo standard IPv4 o IPv6, altrimenti un valore nullo.
function p._is_ip(s)
return p._is_ipv4(s) or p._is_ipv6(s)
end
-- =============================================================================
-- Funzioni per template
-- =============================================================================
function p.is_ipv4(frame) return p._is_ipv4(frame.args[1] or '') end --Uso: {{#invoke:IP validator|is_ipv4|stringa}}
function p.is_ipv6(frame) return p._is_ipv6(frame.args[1] or '') end --Uso: {{#invoke:IP validator|is_ipv6|stringa}}
function p.is_ip (frame) return p._is_ip (frame.args[1] or '') end --Uso: {{#invoke:IP validator|is_ip|stringa}}
return p