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

embedded/2024/11/8 19:08:57/

文章目录

  • 一、正则表达式基础知识
    • 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.代码块

python">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.代码块

python">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.ppmy.cn/embedded/135965.html

相关文章

基于MATLAB DCT域图像水印技术

1数字水印技术的概念和特点 数字水印&#xff08;Digital Watermark&#xff09;技术是将与多媒体内容相关或不相关的一些标示信息直接嵌入多媒体内容当中&#xff0c;但不影响原内容的使用价值&#xff0c;并不容易被人的知觉系统觉察或注意到。通过这些隐藏在多媒体内容中的…

Python绘制爱心

文章目录 系列目录写在前面技术需求完整代码代码分析写在后面 系列目录 序号直达链接爱心系列1Python制作一个无法拒绝的表白界面2Python满屏飘字表白代码3Python无限弹窗满屏表白代码4Python李峋同款可写字版跳动的爱心5Python流星雨代码6Python漂浮爱心代码7Python爱心光波代…

六通道CAN集线器(协议型)

一、功能概述 SG_CanHub_600 是一款具有六路通道的工业级智能 CAN 数字隔离中继集线器。 SG_CanHub_600 能够实现信号再生、延长通信距离、提高总线负载能力、匹配不同速 率 CAN 网络&#xff0c;同时强大的 ID过滤功能可以极大降低 CAN 总线负荷&#xff0c;并具有故障指…

鸿蒙5.0时代:原生鸿蒙应用市场引领开发者服务新篇章

前言 10月22日原生鸿蒙之夜发布会宣布HarmonyOS NEXT正式发布&#xff0c;首个版本号&#xff1a;鸿蒙5.0。这次“纯血鸿蒙”脱离了底层安卓架构成为纯国产的独立系统&#xff0c;仅凭这一点就有很多想象空间。 目前鸿蒙生态设备已超10亿&#xff0c;原生鸿蒙操作系统在中国市…

函数对象笔记

函数对象 C中的函数对象就是C语言中的函数指针 函数指针 指向一个函数的指针&#xff0c;可以动态调用不同的函数。 #include <iostream>// 一个普通的函数 void hello() {std::cout << "Hello, World!" << std::endl; } int add(int a, int b…

以梧桐数据库为例讲解如何计算用户连续登录比率

一、背景说明 在这个竞争激烈的市场环境中&#xff0c;移动运营商不仅需要吸引新客户&#xff0c;还需要关注如何提高客户的留存率。保持客户持续使用套餐、提升客户粘性是衡量服务质量、客户满意度以及营销策略效果的重要指标。因此&#xff0c;分析客户首次办理套餐后的持续…

你使用过哪些MySQL中复杂且使用不频繁的函数?

在MySQL中&#xff0c;除了常用的SELECT、INSERT、UPDATE等基本操作外&#xff0c;还有许多复杂且功能强大的函数&#xff0c;它们能够处理各种复杂的数据处理需求。这些函数虽然在日常开发中可能不常使用&#xff0c;但在特定场景下却能够发挥巨大的作用。下面&#xff0c;我将…

PHP弱类型安全问题

PHP弱类型安全问题主要源于PHP语言的弱类型特性&#xff0c;这种特性允许变量在不同类型之间自由转换&#xff0c;并在比较时进行自动的类型转换。以下是对PHP弱类型安全问题的简述&#xff1a; 一、弱类型特性 在PHP中&#xff0c;变量不需要事先声明类型&#xff0c;且可以…