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

文章目录

  • 一、正则表达式基础知识
    • 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-.]+:匹配一个或多个字母、数字、点或减号(顶级域名部分)。
  • $:匹配字符串的结束。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/908958.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SAP ABAP开发学习——RFC

目录 RFC接口 定义 调用过程 RFC的通信 RFC通信情况 RFC接口系统 RFC的通信模式 RFC版本 RFC调用方式 Web Service接口 SAP创建Web Service示例 远程目标的维护 创建远程目标 外部系统访问设置 RFC的调用 RFC接口 定义 调用过程 RFC的通信 RFC通信情况 RFC接…

gps数据对接G7易流平台

之前伙伴对接G7物流平台获取温度、轨迹数据&#xff0c;写的一塌糊涂&#xff0c;今天来重新对接下。 G7易流 G7物联和易流科技合并后正式发布的品牌&#xff0c;主要面向生产制造与消费物流行业的货主及货运经营者提供软硬一体、全链贯通的SaaS服务。这包括订阅服务&#xff…

【网络】传输层协议TCP(下)

目录 四次挥手状态变化 流量控制 PSH标记位 URG标记位 滑动窗口 快重传 拥塞控制 延迟应答 mtu TCP异常情况 四次挥手状态变化 之前我们讲了四次挥手的具体过程以及为什么要进行四次挥手&#xff0c;下面是四次挥手的状态变化 那么我们下面可以来验证一下CLOSE_WAIT这…

高效新闻管理:SpringBoot框架应用

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理新闻稿件管理系统的相关信息成为必然。开发…

【已解决】C# NPOI如何设置单元格格式

前言 设置单元格格式我们做表格必须要的一步&#xff0c;那么如何对单元格进行设置呢&#xff1f;直接上图看看效果图先&#xff0c;我做的是一个居中然后字体变化的操作&#xff0c;其他的查他的手册即可。 解决方法 直接上代码 IWorkbook excelDoc new XSSFWorkbook();…

通过微调 Embedding 优化 RAG

大型语言模型 (LLM) 向用户和组织展示了巨大的潜力&#xff1b;它们的强大功能和生成能力使它们最近广受欢迎并被广泛接受。LLM 面临的一些缺点是无法以上下文感知的方式生成或响应用户给出的提示&#xff0c;听起来非常通用和开放&#xff0c;或者有时响应的信息已经过时。如果…

微信小程序生成二维码

目前是在开发小程序端 --> 微信小程序。然后接到需求&#xff1a;根据 form 表单填写内容生成二维码&#xff08;第一版&#xff1a;表单目前需要客户进行自己输入&#xff0c;然后点击生成按钮实时生成二维码&#xff0c;不需要向后端请求&#xff0c;不存如数据库&#xf…

用接地气的例子趣谈 WWDC 24 全新的 Swift Testing 入门(二)

概述 从 WWDC 24 开始&#xff0c;苹果推出了全新的测试机制&#xff1a;Swift Testing。利用它我们可以大幅度简化之前“老态龙钟”的 XCTest 编码范式&#xff0c;并且使得单元测试更加灵动自由&#xff0c;更符合 Swift 语言的优雅品味。 在这里我们会和大家一起初涉并领略…

Python的自然语言生成与对话系统介绍

1. 背景介绍 自然语言生成(Natural Language Generation&#xff0c;NLG)和对话系统是人工智能领域的重要研究方向。NLG 涉及将计算机理解的信息转换为自然语言文本&#xff0c;而对话系统则涉及计算机与用户之间的自然语言交互。Python 作为一种易于学习、易于使用的编程语言…

HarmonyOS NEXT 应用开发实战(十、从零设计一款个人中心页面详细示例)

随着HarmonyOS的不断发展&#xff0c;越来越多的开发者开始关注这个平台上的应用开发。本篇文章将详细讲解如何从零开始设计一款个人中心页&#xff0c;并在代码中实现其相关功能。 1. 项目结构设计 首先&#xff0c;我们需要设计一个合理的项目结构。我们将个人中心页面分为几…

Node.js 入门指南:从零开始构建全栈应用

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;node.js篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来node.js篇专栏内容:node.js-入门指南&#xff1a;从零开始构建全栈应用 前言 大家好&#xff0c;我是青山。作…

我们来学mysql -- 连接(原理版)

我们来学mysql -- 连接 题记两张表驱动表 题记 回到初学者的视角&#xff0c;navicat或命令窗口&#xff0c;呈现一行行数据&#xff0c;类比为excel工作薄更是深入人心通过join将多表的记录关联起来&#xff0c;这似乎也没啥问题只是好像是那么回事&#xff0c;又…似乎有想说…

ssm校园二手交易管理系统+vue

系统包含&#xff1a;源码论文 所用技术&#xff1a;SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习&#xff0c;获取源码看文章最下面 需要定制看文章最下面 目 录 1 绪论 1 1.1 选题背景 1 1.2 选题意义 1 1.3 研究内容 2 2 系统开发技术 3 2.1 MySQL数…

2024年前三季度币安、OKX等五大交易所上币表现分析

随着加密市场竞争的加剧&#xff0c;头部交易所逐渐在上币策略、代币选择、交易活跃度等方面采取了不同的应对策略。Animoca Digital Research近期发布的一份报告&#xff0c;通过对币安、OKX、Bitget、KuCoin和Bybit五大交易所2024年前三季度的上币情况进行了详细分析。本文将…

Nature文章《deep learning》文章翻译

这篇文章是对Nature上《deep learning》文章的翻译。原作者 Yann LeCun, Yoshua Bengio& Geoffrey Hinton。 这篇文章的中心思想是深入探讨深度学习在机器学习中的革命性贡献&#xff0c;重点介绍其在特征学习、监督学习、无监督学习等方面的突破&#xff0c;并阐述其在图…

使用 RabbitMQ 有什么好处?

大家好&#xff0c;我是锋哥。今天分享关于【使用 RabbitMQ 有什么好处&#xff1f;】面试题。希望对大家有帮助&#xff1b; 使用 RabbitMQ 有什么好处&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 RabbitMQ 是一种流行的开源消息代理&#xff0c;广…

Scrapy链接MongoDB数据库

本文章是在Scrapy入门-CSDN博客的基础上改写的代码。 1.声明采集目标 打开mySpider/mySpider1/items.py文件&#xff0c;修改MyspiderItem类为AIspiderItem&#xff1a; class AIspiderItem(scrapy.Item): title scrapy.Field() url scrapy.Field() date scrapy.Field() 2…

Qt项目实战:红绿灯小程序

目录 一.初始化对象 二.捕获并处理特定的事件 三.自定义绘制方法 四.绘制外部边框 五.绘制内部边框 六.绘制按钮的背景色 七.绘制覆盖层&#xff08;高光效果&#xff09; 八.效果 九.代码 1.h 2.cpp 一.初始化对象 1.设置文本、颜色、边框和背景色等默认值。 2.安…

ReactPress 是什么?

ReactPress Github项目地址&#xff1a;https://github.com/fecommunity/reactpress 欢迎Star。 ReactPress 是什么&#xff1f; ReactPress 是使用React开发的开源发布平台&#xff0c;用户可以在支持React和MySQL数据库的服务器上架设属于自己的博客、网站。也可以把 ReactP…

萤石私有化设备视频平台EasyCVR视频融合平台如何构建农业综合监控监管系统?

现代农业的迅速发展中&#xff0c;集成监控管理系统已成为提高农业生产效率和优化管理的关键工具。萤石私有化设备视频平台EasyCVR&#xff0c;作为一个具有高度可扩展性、灵活的视频处理能力和便捷的部署方式的视频监控解决方案&#xff0c;为农业监控系统的建设提供了坚实的技…