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

符合指定规则的域名正则表达式构建需求及问题求助

解决域名正则匹配的问题

看起来你之前的正则组合在处理带协议前缀(比如http:/、http:)或者www.前缀时失效,而且没有完全覆盖你列出的5条规则。我来帮你构建一个精准满足需求的正则表达式,同时解释每个部分的作用,让你清楚为什么这么写。

核心需求对应的正则设计思路

我们需要匹配www.example.xx或example.xx这类域名,同时严格满足以下规则:

  1. 符合全球域名规范(字母、数字、连字符组成,不能以连字符开头/结尾)
  2. 无连续两个点
  3. 排除IP地址和FTP地址
  4. 结尾不能带:xxxx格式的端口号
  5. 顶级域名后缀至少2个字符(比如.com、.co.uk都允许,.c不行)

最终正则表达式

支持协议前缀(含不完整的http:/、http:)的版本

这个版本可以处理带完整http:///https://、不完整http://http:,以及www.前缀的情况:

^(?!ftp://)(?!.*\.\.)(?!.*:\d+$)(?!\d+\.\d+\.\d+\.\d+$)(?:https?://|http:\/?)?(?:www\.)?(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?){2,}$

纯域名匹配(不带任何协议前缀)的版本

如果只需要匹配www.example.xx或example.xx本身,用这个更简洁:

^(?!.*\.\.)(?!\d+\.\d+\.\d+\.\d+$)(?:www\.)?(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?){2,}$

正则各部分的作用拆解

让我们逐个看每个规则对应的正则逻辑:

  • ^(?!ftp://):排除FTP地址(规则3),确保字符串不是以ftp://开头
  • (?!.*\.\.):禁止连续两个点(规则2),用负向预查确保整个字符串里没有..
  • (?!.*:\d+$):禁止结尾带端口号(规则4),排除字符串末尾是:数字的情况
  • (?!\d+\.\d+\.\d+\.\d+$):排除IP地址(规则3),避免匹配类似192.168.1.1的纯IP字符串
  • (?:https?://|http:\/?)?:支持协议前缀,可选匹配完整的http:///https://,或者不完整的http://http:,解决你之前遇到的前缀失效问题
  • (?:www\.)?:支持www前缀,可选匹配www.,满足www.example.xx的格式需求
  • (?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+:匹配多级域名前缀,每个域名段符合全球规范(不能以连字符开头/结尾,由字母、数字、连字符组成)
  • (?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?){2,}:确保顶级域名至少2字符(规则5),最后一个域名段长度≥2

测试案例

匹配成功的情况

  • example.com
  • www.example.co.uk
  • http://example.xx
  • https://www.example.xx
  • http:/example.xx
  • http:www.example.xx

匹配失败的情况

  • example.c(顶级域名仅1字符,违反规则5)
  • example..com(含连续点,违反规则2)
  • 192.168.1.1(纯IP地址,违反规则3)
  • ftp://example.com(FTP地址,违反规则3)
  • example.com:8080(结尾带端口,违反规则4)
  • -example.com(域名段以连字符开头,不符合规范)

结合HTML input使用的示例

如果你要在HTML的input[type="url"]里使用,记得可以加上pattern属性,同时因为浏览器默认的url验证可能冲突,建议加上novalidate属性关闭默认验证:

<form novalidate>
  <input 
    type="url" 
    pattern="^(?!ftp://)(?!.*\.\.)(?!.*:\d+$)(?!\d+\.\d+\.\d+\.\d+$)(?:https?://|http:\/?)?(?:www\.)?(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?){2,}$" 
    title="请输入符合要求的域名:支持http/https前缀或www前缀,不能是IP/FTP地址,不能带端口,后缀至少2个字符"
    placeholder="输入域名"
  >
  <button type="submit">提交</button>
</form>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:33:00