最简单的 Lua 判断 IPv4 方法
代码实现
function is_ipv4(ip)
-- 匹配 x.x.x.x,每段 0~255
local chunks = {ip:match("^(%d+)%.(%d+)%.(%d+)%.(%d+)$")}
if #chunks ~= 4 then return false end
for _, v in pairs(chunks) do
if tonumber(v) > 255 then return false end
end
return true
end
-- 测试用例
print(is_ipv4("1.2.3.4")) --> true
print(is_ipv4("256.1.1.1")) --> false(超过255)
print(is_ipv4("abc")) --> false
逻辑说明:
ip:match("^(%d+)%.(%d+)%.(%d+)%.(%d+)$")
- 用
match
提取ip
中的 4段数字,必须符合x.x.x.x
格式。
- 如果不符合(比如少于4段、含字母),直接返回
false
。
- 用
检查每段是否 ≤255
tonumber(v) > 255
:任何一段数字超过255则非法。
优点
- ✅ 极简代码:仅用基础字符串操作和数值比较。
- ✅ 覆盖常见错误:排除非数字、格式错误、超范围值。
缺点
- ❌ 不严格校验前导零(如 “01.2.3.4” 会通过)。如果需要禁止前导零,可追加条件:
lua
if #v > 1 and v:sub(1,1) == "0" then return false end
内容由零声教学AI助手提供,问题来源于学员提问