C#如何使用正则表达式Regex_C#校验手机号邮箱和身份证号【常用】

裘德小鎮的故事

裘德小鎮的故事

2026-05-05

788人浏览

原创

应使用精准号段正则^1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])d{8}$校验手机号,邮箱用^[a-za-z0-9._%+-]+@[a-za-z0-9.-]+.[a-za-z]{2,}$,身份证须结合正则粗筛与加权校验算法。

c#如何使用正则表达式regex_c#校验手机号邮箱和身份证号【常用】

手机号校验用 Regex.IsMatch 别直接写死 pattern

国内手机号基本是 1 开头、第二位常见 3–9、共 11 位,但不能只写 ^1[3-9]\d{9}$ —— 这会误判已停用号段(比如 170/171 虚拟运营商号段实际已大量启用),也漏掉新开放的 19x 号段。更稳妥的做法是明确覆盖当前有效号段:

  • ^1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}$,其中 4[01456879] 排除已废弃的 42/43/47(部分虚拟号段)
  • 注意:正则末尾必须加 $,否则 "13812345678abc" 也会通过
  • 别在循环里反复编译正则,用 static readonly Regex 缓存实例,否则性能明显下降

邮箱校验别信网上抄来的“超长正则”

RFC 5322 规范的邮箱正则长达上千字符,实际项目根本不用那么严格。业务上真正需要拦住的是明显非法格式(比如无 @、双 @、@ 后无点、空域名),而不是验证 "test@example.com." 是否合法。

  • 推荐用:^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
  • + 表示本地部分至少一个字符,避免 @domain.com 通过
  • 域名后缀限制 {2,} 是为了过滤单字母后缀(如 user@x.c),但要注意国际化域名(IDN)需先 Punycode 转换再校验
  • 如果后端要发邮件,光靠正则不够,必须配合 SMTP 连通性探测或 DNS MX 记录查询

身份证号校验必须做最后一位加权校验,不能只看长度和数字

18 位身份证不是纯数字——最后一位可能是 X(罗马数字 10),且前 17 位加权求和 mod 11 必须匹配对应校验码表。只用 ^d{17}[dXx]$ 是严重漏洞。

判断邮箱是否合法类
判断邮箱是否合法类

判断邮箱是否合法类

下载
  • 先用正则粗筛:^\d{17}[\dXx]$
  • 再算加权和:权重数组 new int[] {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2},前 17 位数字 × 对应权重,求和后对 11 取模
  • 余数 0–10 对应校验码 "10X98765432",比如余数是 2,最后一位必须是 'X''x'
  • 别忽略地区码有效性:前 6 位得在公安部《行政区划代码》表中存在(可加载为字典缓存,不建议每次查库)

三个校验放一起时,RegexOptions.Compiled 反而拖慢启动速度

如果只是偶尔校验(比如用户注册提交时),用 RegexOptions.Compiled 不仅没收益,还会增加 JIT 编译开销;只有高频调用(如日志解析)才值得。

  • 推荐写法:Regex.IsMatch(input, pattern, RegexOptions.IgnoreCase),简单场景够用
  • 若 pattern 固定且复用频繁,定义为 static readonly Regex 并省略 RegexOptions.Compiled(.NET Core 3.0+ 默认已优化)
  • 手机号和身份证号校验建议封装成独立方法,内部先做长度/首字符等快速失败判断,再进正则或算法校验,避免无效正则执行

身份证最后一位的大小写容错、邮箱本地部分的连续点号(如 ab..cd@example.com)是否允许、手机号是否接受带空格或短横线的输入——这些边界都得按你业务规则明确,不能全扔给正则扛。

相关专题

更多
c#是什么意思
c#是什么意思

C#是一种通用的面向对象编程语言,它在.NET框架上运行,可用于开发各种类型的应用程序。本专题为大家提供c#相关的各种文章、以及下载和课程。

2023.08.08

529

5

什么是c#
什么是c#

C#(读作C Sharp)是一种现代的、通用的、面向对象的编程语言。它由微软公司开发,于2000年首次发布,主要用于开发Windows桌面应用程序、Web应用程序、移动应用程序以及游戏开发等领域。C#是一种类型安全和托管的编程语言,它结合了C++的强大性能和C语言的简单易学特点,并引入了许多新的特性和概念,如委托、属性、泛型和异步编程等,以提高开发效率和代码可维护性。

2023.08.31

1181

3

C#中base关键字的用法
C#中base关键字的用法

在C#中,base关键字用于访问当前类的基类成员,这包括基类的字段、属性、方法、构造函数、索引器以及事件。想了解更多C#的相关内容,可以阅读本专题下面的文章。

2024.03.13

557

8

C#Task用法
C#Task用法

Task在C#中是用于表示异步操作的对象,它位于System.Threading.Tasks命名空间中。想了解更多C#中各种用法的相关内容,可以阅读本专题下面的文章。

2024.03.14

1053

11

C# 并发与异步编程
C# 并发与异步编程

本专题系统讲解 C# 异步编程与并发控制,重点介绍 async 和 await 关键字、Task 类、线程池管理、并发数据结构、死锁与线程安全问题。通过多个实战项目,帮助学习者掌握 如何在 C# 中编写高效的异步代码,提升应用的并发性能与响应速度。

2026.02.03

149

18

C# 多线程与异步编程
C# 多线程与异步编程

本专题深入讲解 C# 中多线程与异步编程的核心概念与实战技巧,包括线程池管理、Task 类的使用、async/await 异步编程模式、并发控制与线程同步、死锁与竞态条件的解决方案。通过实际项目,帮助开发者掌握 如何在 C# 中构建高并发、低延迟的异步系统,提升应用性能和响应速度。

2026.02.06

203

20

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

2026.03.11

526

24

C# Unity游戏开发与ECS架构实践
C# Unity游戏开发与ECS架构实践

本专题聚焦 C# 在 Unity 游戏开发中的应用,系统讲解 ECS(Entity-Component-System)架构设计、游戏对象管理、性能优化与内存控制策略。通过实际游戏案例,帮助开发者构建高性能、结构清晰的游戏系统,提高游戏开发效率与运行性能。

2026.04.13

139

20

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

2023.06.20

1881

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 18.8万人学习

JavaScript正则表达式基础与实战
JavaScript正则表达式基础与实战

共11课时 | 1.6万人学习

布尔教育正则表达式视频教程
布尔教育正则表达式视频教程

共14课时 | 4.9万人学习