一 邮箱正则概述
昨天在开发项目的时候,有一个验证邮箱的需求,本来想着自己写一个正则表达式来验证的,但是写的时候却发现很多关于正则的知识都忘的差不多了。有些东西想记住真的就要重复练习,看明白了没有用,要天天练习才行。
于是在参考了众多资料之后,选定了一个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}这几类。勤加练习,肯定能熟练运用的。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。