如何在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
相关产品推荐
相关产品推荐

