You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pydantic中无需自定义验证器验证字符串是否全大写

解决方案:Pydantic无需自定义验证器验证字符串全大写

你可以通过constr的regex参数指定正则规则,直接校验输入字符串是否符合全大写要求,无需自定义验证器。

场景1:仅允许大写字母(无小写、无其他字符)

使用正则^[A-Z]+$限制输入只能是一个或多个大写字母:

from pydantic import BaseModel, constr, ValidationError

class FooSchema(BaseModel):
    foo: constr(regex=r'^[A-Z]+$')

# 合法输入测试
try:
    valid_obj = FooSchema(foo="ABC")
    print(valid_obj.foo)  # 输出: ABC
except ValidationError as e:
    print(e)

# 非法输入(含小写)测试
try:
    invalid_obj = FooSchema(foo="AbC")
    print(invalid_obj.foo)
except ValidationError as e:
    print(e)

场景2:允许非字母字符,但所有字母必须为大写

如果需要支持数字、符号等非字母内容,但不允许出现小写字母,使用正则^[^a-z]*$(匹配不包含任何小写字母的字符串):

from pydantic import BaseModel, constr, ValidationError

class FooSchema(BaseModel):
    foo: constr(regex=r'^[^a-z]*$')

# 合法输入(大写+数字+符号)测试
try:
    valid_obj = FooSchema(foo="ABC123!@#")
    print(valid_obj.foo)  # 输出: ABC123!@#
except ValidationError as e:
    print(e)

# 非法输入(含小写)测试
try:
    invalid_obj = FooSchema(foo="ABCabc")
    print(invalid_obj.foo)
except ValidationError as e:
    print(e)

说明

  • constr(regex=...)会直接校验输入格式,不符合规则时抛出ValidationError,拒绝通过校验,完全满足你“不允许包含小写字母的字符串通过”的需求。
  • 原代码中的to_upper=True是自动转换输入为大写,而非校验,和你的需求不符,替换为正则校验即可。

内容的提问来源于stack exchange,提问作者Paul Chuang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 17:47:24