正则表达式(学习Django过程中可能涉及的)
在学习 Django 的过程中,正则表达式主要应用在以下场景中:
- 路由匹配(虽然 Django 3.0 及之后推荐使用路径转换器,但了解正则表达式仍然有用)。
- 表单验证:验证用户输入是否符合特定格式(如邮箱、手机号)。
- 数据处理:处理或提取字符串中的特定信息。
以下是你在学习 Django 过程中可能涉及到的正则表达式,以及它们的功能和示例。
1. 基本字符匹配
正则表达式 | 描述 | 示例 |
---|---|---|
. | 匹配任意单个字符(除了换行符)。 | a.b 匹配 acb 。 |
\d | 匹配任意一个数字,等价于 [0-9] 。 | \d{3} 匹配 123 。 |
\w | 匹配字母、数字或下划线,等价于 [a-zA-Z0-9_] 。 | \w+ 匹配 abc123 。 |
\s | 匹配任意空白字符(空格、制表符、换行等)。 | \s+ 匹配空格区域。 |
2. 数量控制
正则表达式 | 描述 | 示例 |
---|---|---|
* | 匹配前一个字符 0 次或多次。 | a* 匹配 a 或 aaa 。 |
+ | 匹配前一个字符 1 次或多次。 | a+ 匹配 a 或 aaa 。 |
? | 匹配前一个字符 0 次或 1 次。 | a? 匹配 a 或空字符串。 |
{n} | 匹配前一个字符正好 n 次。 | a{3} 匹配 aaa 。 |
{n,} | 匹配前一个字符至少 n 次。 | a{2,} 匹配 aa 或更多。 |
{n,m} | 匹配前一个字符至少 n 次,至多 m 次。 | a{2,4} 匹配 aa 、aaa 或 aaaa 。 |
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), # 替代了正则的方式
]
学习建议
- 在线工具练习:可以在网站 regex101 测试和理解正则表达式。
- 从简单开始:从常见的验证需求入手(如邮箱、手机号)。
- 结合 Django 应用:尝试在表单验证和路由中实际使用正则表达式。