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

文章目录

  • 一、正则表达式基础知识
    • 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 redef 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 redef 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.rhkb.cn/news/464736.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何检查雷池社区版 WAF 是否安装成功?

容器运行状态检查&#xff1a; 使用命令行检查&#xff1a;打开终端&#xff0c;连接到安装雷池的服务器。运行 docker ps 命令&#xff0c;查看是否有与雷池相关的容器正在运行。 如果能看到类似 safeline-mgt、safeline-tengine 等相关容器&#xff0c;并且状态为 Up&#x…

【AI开源项目】Botpress - 开源智能聊天机器人平台及其部署方案

文章目录 Botpress 概述Botpress 的定位 Botpress 的主要特点1. OpenAI 集成2. 易于使用3. 定制和扩展性4. 多平台支持5. 集成和扩展 API6. 活跃的社区和详尽的文档 部署方案集成集成开发集成部署机器人示例开发工具代理本地开发先决条件从源代码构建 Botpress 如何解决常见问题…

Rust 力扣 - 1652. 拆炸弹

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 我们只需要遍历长度长度为k的窗口&#xff0c;然后把窗口内数字之和填充到结果数组中的对应位置即可 题解代码 impl Solution {pub fn decrypt(code: Vec<i32>, k: i32) -> Vec<i32> {let n c…

HTMLCSS:打造酷炫下载安装模拟按钮

效果演示 这段代码通过HTML和CSS创建了一个具有交互效果的下载按钮&#xff0c;当复选框被选中时&#xff0c;会触发一系列动画和样式变化&#xff0c;模拟了一个下载和安装的过程&#xff0c;包括圆形的动画、文本的显示和隐藏等。 HTML <div class"container&quo…

【C++、数据结构】哈希表——散列表(一)(概念/总结)

「前言」 &#x1f308;个人主页&#xff1a; 代码探秘者 &#x1f308;C语言专栏&#xff1a;C语言 &#x1f308;C专栏&#xff1a; C / STL使用以及模拟实现 &#x1f308;数据结构专栏&#xff1a; 数据结构 / 十大排序算法 &#x1f308;Linux专栏&#xff1a; Linux系统编…

WindowsDocker安装到D盘,C盘太占用空间了。

Windows安装 Docker Desktop的时候,默认位置是安装在C盘,使用Docker下载的镜像文件也是保存在C盘,如果对Docker使用评率比较高的小伙伴,可能C盘空间,会被耗尽,有没有一种办法可以将Docker安装到其它磁盘,同时Docker的数据文件也保存在其他磁盘呢? 答案是有的,我们可以…

mac|安装redis及RedisDesk可视化软件

一、安装 通过Homebrew安装 brew install redis 在安装过程可以得到以下信息&#xff1a; 1、启动redis或重新登陆redis brew services start redis 如果只想在前端运行&#xff0c;而不是在后端&#xff0c;则使用以下命令 /opt/homebrew/opt/redis/bin/redis-server /opt…

程序中怎样用最简单方法实现写excel文档

很多开发语言都能找到excel文档读写的库&#xff0c;但是在资源极其受限的环境下开发&#xff0c;引入这些库会带来兼容性问题。因为一个小功能引入一堆库&#xff0c;我始终觉得划不来。看到有项目引用的jar包有一百多个&#xff0c;看着头麻&#xff0c;根本搞不清谁依赖谁。…

重读《人月神话》(12)-未雨绸缪(Plan to Throw One Away)

对程序员而言&#xff0c;一个不容忽视的事实是&#xff1a;任何系统都将经历变更&#xff0c;最初精心设计的软件也可能因不断的修补而变得面目全非。无论设计多么完美&#xff0c;随着时间推移&#xff0c;系统难免陷入混乱&#xff0c;只是程度和速度有所不同。因此&#xf…

(附项目源码)python开发语言,基于python Web的高校毕业论文管理系统 51,计算机毕设程序开发+文案(LW+PPT)

摘 要 随着信息化技术的迅速发展&#xff0c;人类信息化文明的到来&#xff0c;为人类的日常生活以及日常生产活动提供了非常大的便利&#xff0c;有效地解决了很多曾经无法解决的问题。本次基于python Web的高校毕业论文管理系统的开发是针对我国传统的高校毕业论文管理模式沟…

计算机网络:网络层 —— 网络地址转换 NAT

文章目录 网络地址转换 NAT 概述最基本的 NAT 方法NAT 转换表的作用 网络地址与端口号转换 NAPTNAT 和 NAPT 的缺陷 网络地址转换 NAT 概述 尽管因特网采用了无分类编址方法来减缓 IPv4 地址空间耗尽的速度&#xff0c;但由于因特网用户数量的急剧增长&#xff0c;特别是大量小…

C++进阶:unordered_map和unordered_set的使用

目录 一.unordered_set系列 1.1unordered_set类的介绍 1.2unordered_set与set的差异 二.unordered_map的系列 三.unordered_multimap/unordered_multiset 一.unordered_set系列 1.1unordered_set类的介绍 • unordered_set的声明如下&#xff0c;Key就是unordered_set底层…

【6G 需求与定义】ITU(国际电联)对全球6G标准的愿景

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G技术研究。 博客内容主要围绕…

java:题目:用Java实现简单的自取取款操作

import java.util.Scanner; public class ATM {public static void main(String[] args){//自主取款主类Scanner scnew Scanner(System.in);System.out.println("请输入账户号码&#xff1a;");String BankAccoutsrsc.nextLine();/BankAccout3 newBankAccoutnew Bank…

Windows 部署非安装版Redis

1.下载Redis https://github.com/microsoftarchive/redis/releases 选择下载zip包&#xff0c;如Redis-x64-3.0.504.zip&#xff0c;并解压 2.启动非安装版redis服务 进入到redis目录&#xff0c;打开cmd 执行命令 redis-server.exe redis.windows.conf 3.登录redis客户端…

【连续多届检索,ACM出版】第四届大数据、人工智能与风险管理国际学术会议 (ICBAR 2024,11月15-17)--冬季主会场

第四届大数据、人工智能与风险管理国际学术会议 (ICBAR 2024)--冬季主会场 2024 4th International Conference on Big Data, Artificial Intelligence and Risk Management 会议官网&#xff1a;www.icbar.net 2024 4th International Conference on Big Data, Artificial I…

HTML 基础概念:什么是 HTML ? HTML 的构成 与 HTML 基本文档结构

文章目录 什么是 HTML &#xff1f;HTML 的构成 &#xff1f;什么是 HTML 元素&#xff1f;HTML 元素的组成部分HTML 元素的特点 HTML 基本文档结构如何打开新建的 HTML 文件代码查看 什么是 HTML &#xff1f; HTML&#xff08;超文本标记语言&#xff0c;HyperText Markup L…

网络编程 TCP编程 Linux环境 C语言实现

所有基于数据传输通信的程序&#xff0c;都会被分成两种角色&#xff1a; 1. 服务端&#xff1a;又称为服务器 server 提供一种通信服务的进程 基本工作过程是&#xff1a;1> 接收请求数据 2> 处理请求数据 3> 发送处理结果 2. 客户端&#xff1a;client 使用一种通…

第二十九章 Vue之插槽

目录 一、引言 二、默认插槽 2.1. 默认插槽基本语法 2.2. 完整代码 2.2.1. main.js 2.2.2. App.vue 2.2.3. MyDialog.vue 2.3. 运行效果 三、插槽后备内容&#xff08;默认值&#xff09; 3.1. 插槽后备内容基本语法 3.2. 完整代码 3.2.1. main.js 3.2.2. App.vu…