如何校验URI中指定带逗号的关键词后是否紧跟数字
URI片段校验方案:判断
bird,后内容是否为数字 核心逻辑不需要做复杂的全链路URI解析,针对路径斜杠分割的特性,两种常用实现方式都可以满足需求:
方案1:正则直接匹配(轻量无依赖,跨语言通用)
直接用正则定位目标片段,不需要拆分字符串,正则写法如下:
/bird,(\d+)(?=\/|$)/
规则说明:
- 精准匹配固定前缀
bird,,不会误匹配blackbird,这类包含bird字符串的其他关键词 - 捕获组提取
bird,后连续的数字字符 - 正向预查
(?=\/|$)限定提取范围到下一个路径斜杠或路径结尾,不会越界抓取后续路径内容
校验判断逻辑:
- 待校验URI能匹配该正则时,说明
bird,后跟随的是纯数字,比如示例中的/dog/cat/house,1/mouse/bird,1/rabbit可正常捕获到数字1,校验通过 - 匹配失败时,要么路径中不存在
bird,片段,要么bird,后跟随非数字内容(比如提到的bird,foo场景),校验不通过
如果业务需要支持负数、小数格式的数字,对应调整捕获组的匹配规则即可,比如支持小数可改成/bird,(-?\d+(\.\d+)?)(?=\/|$)/。
方案2:路径分段校验(易扩展,适合多规则场景)
如果后续需要新增其他类似关键词的校验规则,用路径拆分的方式维护性更高,实现步骤:
- 将URI按
/分割为路径片段数组,过滤掉分割产生的空字符串 - 遍历片段,查找以
bird,为前缀的目标片段 - 截掉片段开头的
bird,前缀,拿到后续内容 - 判断剩余内容是否为纯数字
以JavaScript实现为例:
function validateUri(uri) { const segments = uri.split('/').filter(seg => seg.length > 0); const target = segments.find(seg => seg.startsWith('bird,')); if (!target) return false; // 无目标片段的场景可根据业务需求调整返回值 const val = target.slice(5); // 'bird,'长度为5,直接截掉前缀 return /^\d+$/.test(val); } // 测试 validateUri('/dog/cat/house,1/mouse/bird,1/rabbit') // 返回true validateUri('/dog/cat/house,1/mouse/bird,foo/rabbit') // 返回false
如果路径中可能出现多个bird,片段,把遍历方法从find换成every,即可校验所有bird,后的内容均为数字。
内容的提问来源于stack exchange,提问作者Marco Cor
相关产品推荐
相关产品推荐

