You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多格式输入正则校验修复:IP校验失败误判为域名问题

修复单输入多格式校验函数:避免无效IP被误判为合法域名

原函数需支持IPv4、IPv6及带子域名的域名校验,但存在逻辑缺陷:当输入为无效IPv4地址(如123.123.255.256,最后一段数值超过255)时,会被误判为合法域名返回true。核心问题是原逻辑仅先校验IP合法性,不合法就直接走域名校验,而无效IP的格式刚好符合域名正则的匹配规则。

解决方案思路

  1. 优先判断输入是否具有IP格式特征(而非直接校验合法性)
  2. 若为IP格式特征,严格校验IP合法性,不合法直接返回false
  3. 若不是IP格式特征,再校验域名合法性

修改后的代码

validateDomain = (input) => {
    // 修正域名正则:移除空格匹配,符合域名规范(域名不含空格)
    const domainRegex = /^(?=.{0,63}$)([A-Za-z0-9]+([-_][A-Za-z0-9]+)*(\.[A-Za-z0-9]{2,6})*)?$/;
    // 严格的IP校验正则(兼容IPv4+IPv6)
    const ipRegex = /^\b((?:(?:\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(?:\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])|(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4})\b$/;
    
    // 判断输入是否具备IP格式特征
    const isIpFormat = 
        // IPv4格式特征:四段数字+三个点的结构
        /^\d+\.\d+\.\d+\.\d+$/.test(input) || 
        // IPv6格式特征:包含冒号,且仅由十六进制字符、冒号、点组成
        /^[0-9a-fA-F:.]+$/.test(input) && input.includes(':');

    if (isIpFormat) {
        // 是IP格式,严格校验合法性
        return ipRegex.test(input);
    } else {
        // 非IP格式,校验域名合法性
        return domainRegex.test(input);
    }
};

关键修改点说明

  1. IP格式前置判断:新增isIpFormat检查,先识别输入是否属于IP类格式,彻底避免无效IP流入域名校验逻辑
  2. 域名正则修正:移除原正则中的\s*,因为域名规范不允许包含空格,防止带空格的非法字符串被误判
  3. 逻辑重构:先判断格式类型,再针对性校验,确保无效IP不会被当作域名处理

测试验证

  • 输入123.123.255.256:符合IPv4格式特征,IP校验不通过,返回false
  • 输入192.168.1.1:IPv4校验通过,返回true
  • 输入2001:0db8:85a3:0000:0000:8a2e:0370:7334:IPv6校验通过,返回true
  • 输入sub.example.co.uk:域名校验通过,返回true
  • 输入invalid@domain:域名校验不通过,返回false

内容的提问来源于stack exchange,提问作者Razak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 19:45:09