7

一 邮箱正则概述

昨天在开发项目的时候,有一个验证邮箱的需求,本来想着自己写一个正则表达式来验证的,但是写的时候却发现很多关于正则的知识都忘的差不多了。有些东西想记住真的就要重复练习,看明白了没有用,要天天练习才行。
于是在参考了众多资料之后,选定了一个mdn上关于邮箱的正则来使用(mdn上的最初版本有个小bug,多了一个空格),该正则表达式如下:

^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}
 [a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$

是不是看的有点懵逼,没关系,推荐大家用一个神奇的网站,这个网站能把写的正则转换成流程图的形式,让大家一目了然的观看。现在把我们要写的正则输入进去,得到流程图如下
流程图

二 邮箱正则分析

从上图中我们可以看出,该正则的大致形式是什么样的了?下面我们结合正则表达式和流程图来分析一下邮箱的验证正则。我上网查阅了关于邮箱命名规则的资料,但是基本上都没有一个标准的邮箱命名规则。

2.1 邮箱前缀

首先我们来看看@符号之前的命名,即邮箱前缀,邮箱前缀的要求比较简单,只要不是什么特别特殊的符号都行,也不管你有多少位数。所以邮箱前缀部分的正则如下

[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+

说明:(1)正则中[]表示一个集合,即匹配的字符串可以是集合中的任意一个符号

 (2)a-z/A-Z 中的 -符号表示从a到z,即a,b,c,d.....z ,而不是表示a,z,-这三个
 (3)+表示数量级单位 一次或多次。{1,n}

2.2 邮箱后缀部分

现在我们来分析分析@部分之后.部分之前的内容

@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?

这段正则最难理解的部分其实就是(?:表示的什么意思了),最开始我也不明白,通过查阅了部分资料发现(?:)表示的是非捕获符号,即可以匹配到该项,但是不会捕获。(如match中不能通过$1,$2来表示捕获项)
明白了(?:)的含义,我们很容易知道上述正则的意思了。
再来看最后一个部分

(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*

该部分和前面的部分相似。这里就不再多说了。

三 总结

对于编码来说,只看是没有用的,必须要多练习,特别是对于不熟悉的内容。正则核心内容其实就是字符(几个)字符(几个)这种。字符组织形式有[字符字符字符],如果需要捕获内容用(字符字符字符)。然后次数的组织形式就是* ?+ {n,m}这几类。勤加练习,肯定能熟练运用的。


淼淼真人
1.1k 声望202 粉丝

一个前端菜鸟!


引用和评论

0 条评论