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

学习正则表达式,如何校验手机号与电子邮箱

文章目录

  • 一、正则表达式基础知识
    • 1.特殊字符(Metacharacters)
    • 2.字符类(Character Classes)
    • 3.预定义字符集(Predefined character classes)
    • 4.分组(Groups)
    • 5.量词(Quantifiers)
    • 6.断言(Assertions)
  • 二、案例:校验输入的手机号码
    • 1.代码块
    • 2.解释说明
  • 三、案例:校验电子邮箱
    • 1.代码块
    • 2.解释说明


一、正则表达式基础知识

正则表达式(Regular Expression,简称regex或regexp)是一种文本模式描述的工具,它可以用来检索、替换符合某个模式的文本。正则表达式由一系列字符组成,这些字符可以是普通字符(例如,字母a到z)、特殊字符(称为"元字符")或两者的组合。

1.特殊字符(Metacharacters)

  • .:匹配任意单个字符(除了换行符)。
  • ^:匹配输入字符串的开始位置。
  • $:匹配输入字符串的结束位置。
  • *:匹配前面的子表达式零次或多次。
  • +:匹配前面的子表达式一次或多次。
  • ?:匹配前面的子表达式零次或一次。
  • {n}:匹配确定的n次。
  • {n,}:至少匹配n次。
  • {n,m}:最少匹配n次且最多m次。
  • []:匹配括号内的任意字符(字符集)。
  • |:匹配两项之间的任意一项(选择)。
  • \:转义特殊字符或表示特殊序列的开始。

2.字符类(Character Classes)

  • [abc]:匹配任何一个字符a、b或c。
  • [a-z]:匹配任何一个小写字母。
  • [A-Z]:匹配任何一个大写字母。
  • [0-9]:匹配任何一个数字。
  • [a-zA-Z]:匹配任何一个字母。

3.预定义字符集(Predefined character classes)

  • \d:匹配任何一个数字,等同于[0-9]
  • \D:匹配任何非数字字符。
  • \w:匹配任何字母数字字符,包括下划线,等同于[a-zA-Z0-9_]
  • \W:匹配任何非字母数字字符。

4.分组(Groups)

  • (...):将多个表达式组合成一个子表达式,可以对整个组应用量词。

5.量词(Quantifiers)

  • *:匹配0次或多次。
  • +:匹配1次或多次。
  • ?:匹配0次或1次。
  • {n}:匹配恰好n次。
  • {n,}:至少匹配n次。
  • {n,m}:最少匹配n次且最多m次。

6.断言(Assertions)

  • ^:匹配输入字符串的开始。
  • $:匹配输入字符串的结束。
  • (?=...):正向前瞻断言,匹配…前面的位置。
  • (?!...):负向前瞻断言,匹配除了…外的任何位置。
  • (?<=...):正向后瞻断言,匹配…后面的位置。
  • (?<!...):负向后瞻断言,匹配除了…外的任何位置。

正则表达式非常强大,但同时也可能变得复杂。不同的编程语言和工具(如Python、JavaScript、Java、Perl等)都有对正则表达式的支持,但它们的具体实现和语法可能会有所不同。

二、案例:校验输入的手机号码

以下是一个Python函数,当用户输入手机号码时,我们可以使用正则表达式来校验中国大陆的手机号码:

1.代码块

import re

def validate_chinese_mobile(phone_number):
    """
    校验中国大陆的手机号码。
    
    参数:
    phone_number (str): 待校验的手机号码。
    
    返回:
    bool: 如果手机号码有效,返回True;否则返回False。
    """
    # 正则表达式匹配中国大陆的手机号码
    pattern = re.compile(r'^1[3-9]\d{9}$')
    return pattern.match(phone_number) is not None

# 测试手机号码
test_numbers = [
    '13800138000',  # 有效的手机号码
    '23800138000',  # 无效的手机号码,第二位数字不是3-9中的一个
    '12345678901',  # 无效的手机号码,以1开头但只有10位数字
    '+8613800138000',  # 可能有效的手机号码,带有国家代码
    '1380001380000',  # 无效的手机号码,以1开头但有12位数字
    '138 0013 8000',  # 无效的手机号码,包含空格
    '1380013800a',   # 无效的手机号码,包含非法字符
]

for number in test_numbers:
    print(f"手机号码 {number} 校验结果:{validate_chinese_mobile(number)}")

2.解释说明

  • ^:匹配字符串的开始。
  • 1:匹配数字1。
  • [3-9]:匹配数字3到9之间的任何一个数字。
  • \d{9}:匹配恰好9个数字。
  • $:匹配字符串的结束。

这个正则表达式确保手机号码中只包含数字,并且符合中国大陆手机号码的格式。如果手机号码中包含空格或其他非法字符,校验将失败。

三、案例:校验电子邮箱

使用Python正则表达式校验电子邮箱

1.代码块

import re

def validate_email(email):
    """
    校验电子邮箱地址。
    
    参数:
    email (str): 待校验的电子邮箱地址。
    
    返回:
    bool: 如果电子邮箱地址有效,返回True;否则返回False。
    """
    # 正则表达式匹配电子邮箱地址
    pattern = re.compile(r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$')
    return pattern.match(email) is not None

# 测试电子邮箱地址
test_emails = [
    'example@example.com',  # 有效的电子邮箱
    'example.example@com',  # 无效的电子邮箱,顶级域名前缺少点
    'example@.com',        # 无效的电子邮箱,域名中有点在开头
    '@example.com',        # 无效的电子邮箱,缺少用户名
    'example@example',     # 无效的电子邮箱,缺少顶级域名
    'example@exa_mple.com' # 有效的电子邮箱,域名中包含下划线
]

for email in test_emails:
    print(f"电子邮箱 {email} 校验结果:{validate_email(email)}")

2.解释说明

  • ^:匹配字符串的开始。
  • [a-zA-Z0-9_.+-]+:匹配一个或多个字母、数字、点、下划线、加号或减号(邮箱用户名部分)。
  • @:匹配@符号。
  • [a-zA-Z0-9-]+:匹配一个或多个字母、数字或减号(域名部分)。
  • \.:匹配点符号。
  • [a-zA-Z0-9-.]+:匹配一个或多个字母、数字、点或减号(顶级域名部分)。
  • $:匹配字符串的结束。

这个正则表达式适用于大多数常见的电子邮箱格式,但请注意,由于电子邮箱地址的规范非常复杂,没有单一的正则表达式可以覆盖所有有效或无效的情况。这个表达式提供了一个基本的校验,适用于大多数实际情况。


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

相关文章:

  • Solana链上的Pump狙击机器人与跟单机器人的工作原理及盈利模式
  • IDEA - 快速去除 mapper.xml 黄色警告线和背景色----简化版
  • 计算机网络安全应该学习哪些知识?
  • HO-XGBoost河马算法优化极限梯度提升树多变量回归预测(Matlab)
  • Thumb 汇编指令集,Thumb 指令编码方式,编译 Thumb 汇编代码
  • Python | Leetcode Python题解之第526题优美的排列
  • RabbitMQ替换默认端口
  • C语言实验 选择结构
  • C++之“取地址运算符重载”
  • 从0开始的STM32之旅 7 串口通信(I)
  • idea 配置tomcat 服务
  • SpringBoot抗疫物资管理:系统开发与部署
  • 2024/11/2 安卓创建首页界面
  • 【MATLAB源码-第196期】基于matlab的A*融合DWA算法栅格路径规划仿真,画出路径图、姿态角度以及线角速度。
  • git入门教程2:git发展历史
  • 【ESP32】ESP-IDF开发 | PWM脉宽调制器+PWM波形输出和捕获例程
  • 架构师之路-学渣到学霸历程-37
  • 修复因Ubuntu升级导致无法联网的问题
  • 线程池学习之执行流程、拒绝策略、线程池状态
  • 心觉:别再等完美工具了!用“小米加步枪”也能战斗,边干边升级才是最强策略!
  • 搜索引擎算法更新对网站优化的影响与应对策略
  • Tenda路由器 敏感信息泄露
  • FreeRTOS工程编译缺失头文件freertos_mpool.h或freertos_os2.h
  • Leetcode 热题100 之 二叉树3
  • 结合无监督表示学习与伪标签监督的自蒸馏方法,用于稀有疾病影像表型分类的分散感知失衡校正|文献速递-基于生成模型的数据增强与疾病监测应用
  • 从0开始学PHP面向对象内容之(类,对象,构造/析构函数)