Flask-WTForms表单验证中常见的正则表达式

在 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. 结论

  1. Regexp() 可用于自定义格式验证(用户名、密码、手机号等)。
  2. 错误消息 可用 message="自定义错误提示" 指定,并在前端显示。
  3. 配合 Flask-WTF ,可以 轻松实现表单验证 并提升用户体验。

如果你有具体的表单需求,可以提供,我帮你写具体代码!🚀

相关推荐
jedi-knight1 天前
AGI时代下的青年教师与学术民主化
人工智能·python·agi
迷藏4941 天前
**eBPF实战进阶:从零构建网络流量监控与过滤系统**在现代云原生架构中,**网络可观测性**和**安全隔离**已成为
java·网络·python·云原生·架构
迷藏4941 天前
**发散创新:基于Solid协议的Web3.0去中心化身份认证系统实战解析**在Web3.
java·python·web3·去中心化·区块链
weixin_156241575761 天前
基于YOLOv8深度学习花卉识别系统摄像头实时图片文件夹多图片等另有其他的识别系统可二开
大数据·人工智能·python·深度学习·yolo
AI_Claude_code1 天前
ZLibrary访问困境方案三:Web代理与轻量级转发服务的搭建与优化
爬虫·python·web安全·搜索引擎·网络安全·web3·httpx
小陈工1 天前
2026年4月7日技术资讯洞察:下一代数据库融合、AI基础设施竞赛与异步编程实战
开发语言·前端·数据库·人工智能·python
时空无限1 天前
ansible 由于不同主机 python 版本不同执行报错
python·ansible
ZhengEnCi1 天前
P2E-Python字典操作完全指南-从增删改查到遍历嵌套的Python编程利器
python
alanesnape1 天前
使用AVL平衡树和列表实现 map容器 -- 附加测试/python代码
python·map·avl 平衡树·bst树·二叉树旋转
卤炖阑尾炎1 天前
Python 网络编程实战:从 TCP/UDP 基础到高并发服务器开发
网络·python·tcp/ip