Custom validators in WTForms using Flask
You can write a custom validator within a form by writing a validate_{field_name}
method. If it raises a ValidationError
, the form will not be valid and will display the error.
For your specific case, here's a solution using regex. It finds the match for the string, and then uses a bit of splitting to get back the scores. After validating the form you can access the scores by form.score1
, form.score2
.
import refrom flask_wtf import FlaskFormclass MatchForm(FlaskForm): match1 = StringField("Russia-Saudi Arabia", validators=[DataRequired()]) def validate_match1(form, field): if not re.search(r"^[0-9]+:[0-9]+$", field.data): raise ValidationError("Invalid input syntax") s1, s2 = form.data.split(":") form.score1 = int(s1) form.score2 = int(s2)