邮箱的正则表达式

一、 背景

项目中要给用户发送邮件,这时候需要校验用户输入的邮箱的有有效性,这肯定用正则呀。
虽然没有统一的邮箱账号格式,但是所有邮箱都符合“名称@域名”的规律。对于名称和域名的字符限制,我们可以根据项目的情况定义一个,比如只允许有英文、数字、下划线等组成。

二、实例1:只允许英文字母、数字、下划线、英文句号、以及中划线组成

例如zhagnfsan-01@qq.com,这也是我们常见的邮箱格式,

2.1、名称的组成部分(zhagnfsan-01)
  • 26个大小写英文字母表示为a-zA-Z
  • 数字表示为0-9
  • 下划线表示为_
  • 中划线表示为-

由于名称是由若干个字母、数字、下划线和中划线组成,所以需要用到+表示多次出现

  • 根据以上条件得出邮件名称部分表达式:[a-zA-Z0-9_-]+
2.2、域名的组成部分(qq.com)

域名是有多级域名的,比如"三级域名.二级域名.*域名",比如“qq.com”、“www.qq.com”、“mp.weixin.qq.com”、“163.com”,这样域名也是有规律的,那就是“XX.XX.XX”,就是由第一个”XX“拼接上多个“.XX”的规律。
这样,又可以江域名分为两部分来看,首先是第一个XX,可以表示为[a-zA-Z0-9_-]+;然后是后面重复的".XX",一个“.XX”可表示为.[a-zA-Z0-9_-]+,多个的话就是(.[a-zA-Z0-9_-]+)+

综上所述,域名部分可以表示为[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+

2.3、完整的正则

最终表达式:由于邮箱的基本格式为“名称@域名”,需要使用“^”匹配邮箱的开始部分,用“$”匹配邮箱结束部分以保证邮箱前后不能有其他字符,所以最终邮箱的正则表达式为:

^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$

三、实例2:名称允许汉字、字母、数字,域名只允许英文域名

现在用中文命名的邮箱也合法了,所以会有这样的邮箱:张三@lenovo.com.cn

3.1、名称的组成部分
  • 26个大小写英文字母表示为a-zA-Z
  • 数字表示为0-9
  • 汉字在正则表示为[\u4e00-\u9fa5]

邮件名称部分表达式:[A-Za-z0-9\u4e00-\u9fa5]+

3.2、域名的组成部分

根据前面分析,得出域名部分的表达式为[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+

3.3、完整的正则

最终表达式:我们用@符号将邮箱的名称和域名拼接起来,因此完整的邮箱表达式为

^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$

上一篇:Redis 教程系列之Redis 数据类型(四)


下一篇:P7480 Reboot from Blue 线段树优化建图跑最短路