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

发布于:2024-11-03 ⋅ 阅读:(123) ⋅ 点赞:(0)


一、正则表达式基础知识

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

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


网站公告

今日签到

点亮在社区的每一天
去签到