如何调整正则表达式将域名后缀段限制为最多24个可接受英文字符
域名校验正则后缀长度限制调整方案
原规则的现存疏漏
- 原正则中用于匹配域名分段分隔点的位置未对字面
.做转义,实际会匹配任意单个字符,无法精准识别域名的分段边界 - 原规则的后缀长度限制未和前面的主体匹配段做强绑定,会出现超长后缀被拆分到域名主体匹配组、绕过长度校验的情况
调整后可直接使用的规则
调整后可实现:域名最后一个点分隔的后缀段,仅允许2-24个英文字符,超出长度的请求会被直接拦截,对应的正则表达式为:/(?!-)(?!\.)(?!.*?\.\.)(?![a-zA-Z]+\-\.[a-zA-Z]+)(?![a-zA-Z]+\+[a-zA-Z]+\.[a-zA-Z]+)(?![a-zA-Z\#]+\/[a-zA-Z\-]+)(?![0-9]+\.[a-zA-Z0-9]+\.[a-zA-Z0-9]\.[a-zA-Z0-9]+)([a-zA-Z0-9@%._~#=]+-*[a-zA-Z0-9@%._~#=]+)+\.(?!-)[a-zA-Z]{2,24}\b([-a-zA-Z0-9@%_+.~?&;//=:$]*)$/
调整细节
- 将原规则中未转义的
.修改为\.,精准匹配域名分段的字面分隔点,避免无关字符的误匹配 - 完整保留原规则的所有否定校验逻辑,仅强化后缀段的匹配边界:最后一个分隔点后的匹配范围固定为2-24个英文字符,从规则层面避免主体匹配组吞并超长后缀的绕过场景
- 可直接拦截类似
www.google.comddddddddddddddddddddddddddd这类后缀段长度超过24字符的非法域名
内容的提问来源于stack exchange,提问作者Ayaka
相关产品推荐
相关产品推荐

