当前位置: 首页 > article >正文

正则表达式(学习Django过程中可能涉及的)

在学习 Django 的过程中,正则表达式主要应用在以下场景中:

  1. 路由匹配(虽然 Django 3.0 及之后推荐使用路径转换器,但了解正则表达式仍然有用)。
  2. 表单验证:验证用户输入是否符合特定格式(如邮箱、手机号)。
  3. 数据处理:处理或提取字符串中的特定信息。

以下是你在学习 Django 过程中可能涉及到的正则表达式,以及它们的功能和示例。


1. 基本字符匹配

正则表达式描述示例
.匹配任意单个字符(除了换行符)。a.b 匹配 acb
\d匹配任意一个数字,等价于 [0-9]\d{3} 匹配 123
\w匹配字母、数字或下划线,等价于 [a-zA-Z0-9_]\w+ 匹配 abc123
\s匹配任意空白字符(空格、制表符、换行等)。\s+ 匹配空格区域。

2. 数量控制

正则表达式描述示例
*匹配前一个字符 0 次或多次。a* 匹配 aaaa
+匹配前一个字符 1 次或多次。a+ 匹配 aaaa
?匹配前一个字符 0 次或 1 次。a? 匹配 a 或空字符串。
{n}匹配前一个字符正好 n 次。a{3} 匹配 aaa
{n,}匹配前一个字符至少 n 次。a{2,} 匹配 aa 或更多。
{n,m}匹配前一个字符至少 n 次,至多 m 次。a{2,4} 匹配 aaaaaaaaa

3. 分组和选择

正则表达式描述示例
( ... )将正则表达式括起来,表示分组。(ab)+ 匹配 abab
``匹配左右任意一个表达式(逻辑“或”)。

4. 特殊符号

正则表达式描述示例
^匹配字符串的开头。^a 匹配 abc 中的 a
$匹配字符串的结尾。a$ 匹配 cba 中的 a
\b匹配单词边界。\bcat\b 匹配 cat,但不匹配 cats

5. 常用场景的正则表达式

路由匹配

早期的 Django 版本会用正则表达式匹配 URL 路由,例如:

from django.urls import re_path

urlpatterns = [
    re_path(r'^articles/(\d{4})/$', views.year_archive),  # 匹配年份,如 /articles/2024/
]
表单验证

通过正则表达式验证用户输入:

import re
from django import forms

class MyForm(forms.Form):
    phone = forms.CharField(
        validators=[
            forms.RegexValidator(
                regex=r'^\+?1?\d{9,15}$',
                message="请输入有效的国际电话号码。"
            )
        ]
    )
常见正则表达式实例
场景正则表达式示例
邮箱地址^[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$test@example.com
国内手机号^1[3-9]\d{9}$13812345678
日期(YYYY-MM-DD)^\d{4}-\d{2}-\d{2}$2024-12-25
IPv4 地址^(\d{1,3}\.){3}\d{1,3}$192.168.1.1
URL^https?://[A-Za-z0-9.-]+\.[A-Za-z]{2,}/?.*$https://example.com/path

Django 中正则表达式替代

Django 3.0 开始推荐使用路径转换器代替复杂的正则表达式匹配。例如:

from django.urls import path

urlpatterns = [
    path('articles/<int:year>/', views.year_archive),  # 替代了正则的方式
]

学习建议

  1. 在线工具练习:可以在网站 regex101 测试和理解正则表达式。
  2. 从简单开始:从常见的验证需求入手(如邮箱、手机号)。
  3. 结合 Django 应用:尝试在表单验证和路由中实际使用正则表达式。

http://www.kler.cn/a/456418.html

相关文章:

  • 30天面试打卡计划 2024-12-25 26 27 面试题
  • 【代码分析】Unet-Pytorch
  • 雷电模拟器安装LSPosed
  • hadoop搭建
  • Gitlab17.7+Jenkins2.4.91实现Fastapi/Django项目持续发布版本详细操作(亲测可用)
  • Qt C++关于QSpinBox、QDoubleSpinBox的输入框内鼠标点击事件无法触发截取信号的解决办法
  • Java并发编程框架之综合案例—— 分布式日志分析系统(七)
  • Linux高级--2.4.2 linux TCP 系列操作函数 -- 深层理解
  • 【全栈开发】----Mysql基本配置与使用
  • .NET Framework 逐渐过时,.NET 8和 .NET 9引领未来
  • Postman接口测试工具
  • 【详细讲解】hive优化
  • Android 13 Aosp SystemUI Android Studio版本
  • 25页PDF | 企业级指标体系设计方法
  • 大学课程Go语言的算法与数据结构
  • Windows安装ElasticSearch与kibana
  • Ardunio BLE keyboard 库的使用
  • 变长的时间戳(第4版)
  • Spring Boot 项目中 Maven 剔除无用 Jar 引用的最佳实践
  • LabVIEW Ctrl+Shift space 快速放置被占用解决办法
  • 三层交换机配置
  • 【UE5.3.2 】引擎中安装RiderLink插件
  • 将现有Web 网页封装为macOS应用
  • TCP 小队列的设计原理
  • Python学习_集合
  • 什么是数据库的锁?怎么实现?