You need to enable JavaScript to run this app. C# 实现仅允许HTTPS的URL校验正则表达式问题求助
优惠活动
大模型
产品
解决方案
定价
更多

C# 实现仅允许HTTPS的URL校验正则表达式问题求助

问题根源定位

你当前使用的正则之所以会放行HTTP协议链接、无法实现仅匹配HTTPS的要求,核心原因有两个:

  • 原正则中的((https)://)?结构末尾带有?匹配符,代表整个括号内的协议段可以出现0次或者1次,从校验逻辑设计上就没有强制要求链接必须以HTTPS协议开头
  • 因为没有对协议段做排他校验,当输入内容是http://xxx结构时,协议部分的内容会被后续的通用字符组直接匹配,最终通过校验
  • 另外原正则的域名匹配段([\w+?\.\w+])+本身也存在逻辑漏洞,把+、?当成了允许的合法字符纳入匹配范围,并没有真正实现精准的域名结构校验。
修正方案

要实现仅允许HTTPS协议、拦截所有带特殊字符的非法链接的校验要求,需要调整两个核心规则:

  • 移除HTTPS协议段的可选标记,强制要求链接必须以https://为开头
  • 收紧后续字符的匹配范围,仅保留URL结构必需的合法字符,过滤所有要求拦截的特殊字符

最终可直接使用的修正正则为:
^https://[a-zA-Z0-9\-_.:/]+$

该正则的匹配逻辑为:

  • 开头直接锚定匹配https://,从源头拦截HTTP协议、无协议前缀的所有链接
  • 后续字符组仅允许匹配字母、数字、短横、下划线、点、冒号、斜杠,范围已经剔除了所有非URL结构必需的特殊字符,完全满足特殊字符过滤的要求
边界效果验证

校验规则的实际拦截与放行效果如下:

  • 可正常通过的合法场景:
    • https://example.com
    • https://sub.test.cn:9000/path?name=demo
  • 会被拦截的非法场景:
    • http://example.com(HTTP协议,不符合HTTPS限定要求)
    • example.com/path(无HTTPS协议前缀,不符合规则)
    • https://example!@#.com(带非法特殊字符,符合拦截要求)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 03:06:03