OpenAPI 3.0空字符串校验正则拦截带换行符有效字符串问题排查
问题原因
这个问题的核心是你使用的正则规则兼容问题:
- OpenAPI 3.0 要求
pattern字段遵循ECMA-262正则标准,但不同语言的校验库实现存在细微差异,绝大多数实现中.元字符默认不会匹配换行符\n、回车符等行终止字符。你配置的正则^(?!\s*$).+需要匹配整个输入字符串,当输入末尾带\n时,.+只能匹配到换行前的内容,无法覆盖完整的字符串,最终触发校验失败。 - 你当前配置的
minLength: 1已经可以拦截纯空字符串"",新增的pattern规则是为了拦截全空白字符(比如纯空格、制表符组成的字符串),但因为没有兼容换行符的情况,才出现了合法内容被误拦截的问题。
修复方案
- 如果你允许接口传入的字符串包含换行符,仅需要禁止全空白内容,可以把正则修改为:
pattern: ^(?!\s*$)[\s\S]+,[\s\S]可以匹配所有字符包括换行符,不会误杀带换行的合法内容。 - 如果你不允许字符串中存在换行符,可以直接明确限制不允许行终止符:
pattern: ^(?!\s*$)[^\n\r]+,同时满足禁止全空白和禁止换行的需求。
内容的提问来源于stack exchange,提问作者ernest
相关产品推荐
相关产品推荐

