我想添加到这个功能域检查:
GetType = function(ip)
local Split = function(s,sep)
local t={};i=1
for str in string.gmatch(s,"([^"..sep.."]+)") do
t[i] = str
i = i + 1
end
return t
end
local R = {ERROR=0,IPV4=1,IPV6=2,DOMAIN=3,STRING=4}
if type(ip) ~= "string" then return R.ERROR end
local chunks = {ip:match("(%d+)%.(%d+)%.(%d+)%.(%d+)")}
if #chunks == 4 then
for _,v in pairs(chunks) do
if tonumber(v) > 255 then return R.STRING end
end
return R.IPV4
end
local chunks = {ip:match(("([a-fA-F0-9]*):"):rep(8):gsub(":$","$"))}
if #chunks == 8 then
for _,v in pairs(chunks) do
if #v > 0 and tonumber(v, 16) > 65535 then return R.STRING end
end
return R.IPV6
end
-- Domain check
-- Ensuring only alphanumeric characters and . and -
-- Ensuring no --
-- Ensuring - is not at the start or end of part
-- Ensuring there is more than one part
if string.gsub(ip,"[%w%-%.]","") ~= "" then return R.STRING end
if string.find(ip,'--',1,true) ~= nil then return R.STRING end
local t = Split(ip,"%.")
if #t <= 1 then return R.STRING end
for i,v in pairs(t) do
if string.find(t[i],'-',1,true) == 1 or string.find(t[i],'-',#t[i],true) ~= nil then return R.STRING end
end
return R.DOMAIN
end
它在 IPV4/6 上做得很好,但我对如何进行域检查有点迷茫,所以问题是:
进行检查的最佳方法是什么?
我有所有的东西要检查是否正确吗?