ZBLOG

lua判断ip地址是否为规范的IPV4地址

在 Lua 中判断一个字符串是否为规范的 IPv4 地址,可以通过正则表达式(模式匹配)或自定义逻辑实现。以下是几种方法:


方法1:使用 string.match 进行模式匹配

function is_valid_ipv4(ip)
    -- 匹配 0.0.0.0 ~ 255.255.255.255
    local pattern = "^((25[0-5]|2[0-4]%d|1%d%d|[1-9]?%d)%.){3}(25[0-5]|2[0-4]%d|1%d%d|[1-9]?%d)$"
    return ip and string.match(ip, pattern) ~= nil
end

-- 测试
print(is_valid_ipv4("192.168.1.1"))   -- true
print(is_valid_ipv4("256.1.1.1"))      -- false(超过255)
print(is_valid_ipv4("abc"))            -- false

正则解释

  • 25[0-5]:匹配 250~255。
  • 2[0-4]%d:匹配 200~249。
  • 1%d%d:匹配 100~199。
  • [1-9]?%d:匹配 0~99(允许前导零,如 “01”)。
  • %.:匹配点号(需转义)。

方法2:拆分字符串逐段验证

function is_valid_ipv4(ip)
    if not ip then return false end
    local segments = {}
    for seg in string.gmatch(ip, "(%d+)") do
        table.insert(segments, seg)
    end
    if #segments ~= 4 then return false end

    for _, seg in ipairs(segments) do
        local num = tonumber(seg)
        if not num or num < 0 or num > 255 or tostring(num) ~= seg then
            return false
        end
    end
    return true
end

-- 测试
print(is_valid_ipv4("10.0.0.1"))       -- true
print(is_valid_ipv4("10 .0 .0 .1"))     -- false(含空格)

关键点

  • 检查是否为 4段数字
  • 每段数字必须在 0~255 范围内。
  • 拒绝前导零(如 “012”)但允许 “0”。

注意事项

  1. 特殊地址
    • "127.0.0.1""0.0.0.0" 是合法的,但需根据业务决定是否允许。
  2. 性能
    • 方法1(正则)更简洁,适合快速验证。
    • 方法2(拆分)可扩展性更强(如支持额外格式检查)。
  3. IPv6
    • IPv6需更复杂的正则或专用库(如 luasocket)。

如果需要严格的网络编程验证,建议结合第三方库(如 luasocket.inet_pton)。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=8056

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?