Правило Regexp
Правило Regexp применяется к полю формы
и проверяет, что введённая строка соответствует
заданному регулярному выражению. Первым параметром
передаётся шаблон регулярного выражения. Вторым
необязательным параметром передаётся сообщение об
ошибке валидации.
Синтаксис
Regexp(regex, [message])
Пример
Давайте создадим форму с полем login, которое
допускает только латинские буквы и цифры:
from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import Regexp
app = Flask(__name__)
app.config['SECRET_KEY'] = 'abcde'
class LoginForm(FlaskForm):
login = StringField('Login', validators=[Regexp(r'^[a-zA-Z0-9]+$')])
submit = SubmitField('Send')
@app.route('/', methods=['GET', 'POST'])
def index():
form = LoginForm()
if form.validate_on_submit():
res = form.login.data
return res
return render_template('index.html', form=form)
Шаблон для вывода формы:
<form method="post">
{{ form.hidden_tag() }}
<p>{{ form.login.label }} {{ form.login() }}</p>
<p>{{ form.submit() }}</p>
</form>
Результат выполнения кода для значения 'abcde123':
"abcde123"
Пример
Давайте добавим своё сообщение об ошибке для правила
Regexp:
from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import Regexp
app = Flask(__name__)
app.config['SECRET_KEY'] = 'abcde'
class UserForm(FlaskForm):
login = StringField('Login', validators=[
Regexp(r'^[a-z]+$', message='Only lowercase letters')
])
submit = SubmitField('Send')
@app.route('/', methods=['GET', 'POST'])
def index():
form = UserForm()
if form.validate_on_submit():
res = form.login.data
return res
return render_template('index.html', form=form)
Шаблон для вывода формы и ошибок валидации:
<form method="post">
{{ form.hidden_tag() }}
<p>{{ form.login.label }} {{ form.login() }}</p>
{% for error in form.login.errors %}
<p>{{ error }}</p>
{% endfor %}
<p>{{ form.submit() }}</p>
</form>
Результат выполнения кода для значения 'ABCDE':
Only lowercase letters