如何使用Pydantic进行版本号正则验证?
解决Pydantic版本号验证的正则问题
你的正则验证失败主要有三个核心问题:
- 未转义小数点
.:正则里.默认匹配任意字符,必须用\.表示实际的小数点 - 部分规则仅匹配单个数字:比如
[0-9]$或([0-9])$只能匹配1位数字,无法兼容多位数的版本段(比如10.20.30) - 冗余的捕获组:
([0-9])+里的括号是多余的,直接用[0-9]+或\d+即可匹配一个或多个数字
正确的正则语法
针对你需要的x.y.z格式版本号(每段至少1位数字),正确的正则是:
install_component_version: constr(regex=r"^\d+\.\d+\.\d+$")
或者等价的(用[0-9]替代\d):
install_component_version: constr(regex=r"^[0-9]+\.[0-9]+\.[0-9]+$")
规则说明
^:锁定字符串开头,避免版本号前出现多余字符\d+:匹配1个或多个数字(对应主版本、次版本、修订号)\.:转义后的小数点,确保只匹配实际的.符号$:锁定字符串结尾,避免版本号后出现多余字符
完整示例代码
from pydantic import BaseModel, constr class ComponentInstall(BaseModel): install_component_version: constr(regex=r"^\d+\.\d+\.\d+$") # 验证通过的案例 valid_case = ComponentInstall(install_component_version="1.1.0") valid_case2 = ComponentInstall(install_component_version="3.5.6") valid_case3 = ComponentInstall(install_component_version="10.20.30") # 验证失败的案例(会抛出ValidationError) # invalid_case = ComponentInstall(install_component_version="1.1") # invalid_case2 = ComponentInstall(install_component_version="1.a.0") # invalid_case3 = ComponentInstall(install_component_version="1.1.")
内容的提问来源于stack exchange,提问作者Maciej
相关产品推荐
相关产品推荐

