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