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

JS端符合域名注册规范的Regex校验实现方案求助

JS域名校验功能实现方案

核心实现代码

function validateDomains(input) {
  // 域名格式校验正则,不含协议、长度校验逻辑
  const domainFormatReg = /^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/
  // 按分号拆分域名,过滤空值、去除每一项首尾空白字符
  const domainList = input.split(';').map(item => item.trim()).filter(Boolean)
  const invalidDomains = []
  
  for (const domain of domainList) {
    // 移除http/https协议头
    const noProtocolDomain = domain.replace(/^https?:\/\//, '')
    // 格式校验
    if (!domainFormatReg.test(noProtocolDomain)) {
      invalidDomains.push(domain)
      continue
    }
    // 提取域名主体(自动剔除末尾顶级域名后缀)
    const mainPart = noProtocolDomain.slice(0, noProtocolDomain.lastIndexOf('.'))
    // 主体长度校验
    if (mainPart.length > 63) {
      invalidDomains.push(domain)
    }
    // 若需限制子域名每一级标签长度都不超过63,可替换上面的长度校验逻辑为:
    // const labelList = mainPart.split('.')
    // if (labelList.some(label => label.length > 63)) {
    //   invalidDomains.push(domain)
    // }
  }
  
  return {
    allValid: invalidDomains.length === 0,
    invalidDomains: invalidDomains
  }
}

方案说明

  • 执行效率远高于多正则匹配方案:仅用1条正则完成格式校验,长度校验通过原生字符串方法实现,避免多正则匹配、正则多重断言带来的性能损耗
  • 完全匹配需求规则:
    • 自动忽略输入的http:///https://协议头,统计主体长度时自动排除顶级域名后缀
    • 正则约束每一段域名首尾不可为连字符,中间可正常使用连字符
    • 仅允许字母、数字、连字符、英文句号,无其他特殊字符
    • 天然支持子域名的英文句号分隔场景
    • 自动拆分分号分隔的多个域名单独校验,返回全局校验结果和不合规的域名列表

测试示例

// 符合规则的输入
validateDomains('text-example.com; test.sub.example.com; https://demo123.com') 
// 返回 {allValid: true, invalidDomains: []}

// 不符合规则的输入
validateDomains('-test.com; test@example.com; verylongnamethatexceeds63charactersssssssssssssssssssssssssss.com; test-.com')
// 返回包含上述4个不合规域名的结果

内容的提问来源于stack exchange,提问作者Artur Żółkiewski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:57:02