如何遍历空格分隔的字符串变量并校验每个字符串是否匹配指定正则(不匹配则抛出异常)
解决路径合法性校验的思路与实现
没问题,我来帮你一步步理清这个需求的实现思路!
从你定义变量的语法来看,应该是用Groovy或者类似的JVM语言,下面就用Groovy来完成这个合法性校验的实现:
完整代码示例
def test = "/apps/damm/i18n /apps/dfdf/i18n /apps/fdf/i18n /apps/bsam/i18n /content" // 1. 把空格分隔的字符串拆分成独立路径列表(用\s+处理多个连续空格的情况) def paths = test.split(/\s+/) // 2. 遍历每个路径做规则校验 paths.each { path -> // 校验规则1:匹配/apps/xxx/i18n开头的路径(后续可带任意内容) boolean matchesAppsPattern = path ==~ /^\/apps\/[^\/]+\/i18n\/?.*/ // 校验规则2:以/content开头 boolean startsWithContent = path.startsWith('/content') // 两个规则都不满足时抛出异常 if (!matchesAppsPattern && !startsWithContent) { throw new IllegalArgumentException("非法路径:$path!路径必须符合/apps/xxx/i18n格式(后续可带任意内容),或者以/content开头。") } }
关键步骤解释
- 拆分路径:用
split(/\s+/)而不是简单的split(" "),是为了处理可能存在的多个连续空格,避免拆分出空字符串元素。 - 正则表达式说明:
^\/apps\/[^\/]+\/i18n\/?.*的含义是:^:匹配字符串开头\/apps\/:匹配固定前缀/apps/[^\/]+:匹配至少一个非斜杠的字符(也就是你说的xxx部分)\/i18n\/?:匹配/i18n,后面的/?表示斜杠可选.*:匹配后续任意内容(包括空内容)
- 异常抛出:用
IllegalArgumentException这类标准异常,能让调用方更清晰地识别参数合法性问题,你也可以根据业务需求自定义异常类型。
如果是在其他语言(比如Bash)中实现,核心思路也是一致的:拆分字符串、遍历校验、不满足规则则抛出错误,只是语法细节会有所不同。
内容的提问来源于stack exchange,提问作者WhoAmI
相关产品推荐
相关产品推荐

