在 Flask-WTForms 的表单验证中,wtforms.validators.Regexp
允许使用 正则表达式 进行自定义验证。以下是一些 常见的正则表达式,以及它们在 Flask-WTF 中的使用方法。
1. 常见正则表达式
验证类型 | 正则表达式 | 说明 |
---|---|---|
用户名 | ^[a-zA-Z0-9_]{3,20}$ |
允许字母、数字、下划线,长度 3-20 |
密码 | ^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{6,12}$ |
必须包含 字母+数字,6-12 位 |
手机号(中国) | ^1[3-9]\d{9}$ |
以 1 开头的 11 位数字 |
邮箱 | ^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$ |
电子邮件格式 |
身份证号(中国) | `^\d{6}(18 | 19 |
IP 地址 | ^(?:\d{1,3}\.){3}\d{1,3}$ |
IPv4 地址 |
日期(YYYY-MM-DD) | `^\d{4}-(0[1-9] | 1[0-2])-(0[1-9] |
URL | ^https?://[^\s/$.?#].[^\s]*$ |
网址格式 |
纯中文 | ^[\u4e00-\u9fa5]+$ |
仅允许中文字符 |
2. 在 Flask-WTF 中使用
在 wtforms.validators.Regexp
里添加正则表达式进行验证,例如:
python
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Regexp
class RegisterForm(FlaskForm):
username = StringField('用户名', validators=[
DataRequired(),
Regexp(r'^[a-zA-Z0-9_]{3,20}$', message="用户名只能包含字母、数字、下划线,长度3-20")
])
password = PasswordField('密码', validators=[
DataRequired(),
Regexp(r'^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{6,12}$', message="密码必须包含字母和数字,长度6-12位")
])
phone = StringField('手机号', validators=[
DataRequired(),
Regexp(r'^1[3-9]\d{9}$', message="手机号格式不正确")
])
submit = SubmitField('注册')
✅ Regexp(r'正则', message='错误提示')
添加正则验证
✅ 错误信息 会在 form.errors
中返回给前端
3. 在 HTML 页面显示错误
在 templates/register.html
里:
html
<form method="POST">
{{ form.hidden_tag() }}
<p>{{ form.username.label }}<br>
{{ form.username(size=30) }}<br>
{% for error in form.username.errors %}
<span style="color:red;">{{ error }}</span>
{% endfor %}
</p>
<p>{{ form.password.label }}<br>
{{ form.password(size=30) }}<br>
{% for error in form.password.errors %}
<span style="color:red;">{{ error }}</span>
{% endfor %}
</p>
<p>{{ form.phone.label }}<br>
{{ form.phone(size=30) }}<br>
{% for error in form.phone.errors %}
<span style="color:red;">{{ error }}</span>
{% endfor %}
</p>
<p>{{ form.submit() }}</p>
</form>
当输入不符合正则表达式时,会在页面显示错误提示。
4. 结论
Regexp()
可用于自定义格式验证(用户名、密码、手机号等)。- 错误消息 可用
message="自定义错误提示"
指定,并在前端显示。 - 配合 Flask-WTF ,可以 轻松实现表单验证 并提升用户体验。
如果你有具体的表单需求,可以提供,我帮你写具体代码!🚀