Flask中WTForms自定义验证器开发:实现数字:数字格式校验
实现WTForms自定义「数字:数字」格式验证器
没问题!要实现这个要求的格式验证器,咱们可以借助WTForms的自定义验证机制,结合正则表达式来完成,这里提供两种实用的实现方式:
方式一:自定义验证函数(快速简单)
这种方式适合只在单个字段使用的场景,直接写一个验证函数即可:
首先导入所需模块:
from wtforms import StringField, validators, ValidationError import re
然后定义验证函数:
def validate_match_format(form, field): # 正则表达式匹配「数字:数字」格式,确保整个输入符合要求 format_pattern = r'^\d+:\d+$' if not re.match(format_pattern, field.data): raise ValidationError('请输入符合「数字:数字」格式的内容,例如 2:1')
最后更新你的字段定义,把这个验证器加入validators列表:
match1 = StringField('Russia-Saudi Arabia', validators=[validators.DataRequired(), validate_match_format])
方式二:自定义验证器类(可复用)
如果多个字段都需要这个格式验证,推荐写成可复用的验证器类:
from wtforms import StringField, validators, ValidationError import re class MatchFormatValidator(validators.Validator): def __call__(self, form, field): format_pattern = r'^\d+:\d+$' if not re.match(format_pattern, field.data): raise ValidationError('请输入符合「数字:数字」格式的内容,例如 2:1')
使用时直接实例化这个类:
match1 = StringField('Russia-Saudi Arabia', validators=[validators.DataRequired(), MatchFormatValidator()])
可选调整:限制数字位数
如果需要限制数字的位数(比如最多两位数字),只需要修改正则表达式即可,例如:
# 匹配1-2位数字:1-2位数字的格式 format_pattern = r'^\d{1,2}:\d{1,2}$'
这样就能确保输入的数字不会过长,比如12:3或4:56都是合法的,但123:4就会被拦截。
内容的提问来源于stack exchange,提问作者Jacob Singh Risgaard Knudsen
相关产品推荐
相关产品推荐

