day220-Regex-email

要点

一步步写一个邮箱正则。

条件:

只允许[a-z][A-Z][.]且不允许”.”号连续和处于开头结尾

流程:

  1. 数字 + 单个(.) + 数字
  2. 数字 + 多个不连续的(.) + 数字
  3. 多个数字间隔连续
  4. 完全匹配
  5. 匹配@后缀
  6. 优化建议

数字+单个(.)+数字

[a-zA-Z0-9]+(\.)+[a-zA-Z0-9]

测试

匹配:hello.world 中的 hello.w

匹配:hello……world 中的 hello……w

匹配:hello.word.hello.to 中 hello.w

知识点

"+":匹配前面一个表达式 1 次或者多次。等价于 {1,}。

数字+多个不连续的(.)+数字

([a-zA-Z0-9]+)([\.{1}])?([a-zA-Z0-9])

测试

hello.world => hello.w

hello…….word => hello

hello.word.hello.to => hello.w

知识点

"{n}":n 是一个正整数,匹配了前面一个字符刚好出现了 n 次。

"?":匹配前面一个表达式 0 次或者 1 次。等价于 {0,1}。

例子:/e?le?/ 匹配 “angel” 中的 ‘el’、”angle” 中的 ‘le’ 以及 “oslo’ 中的 ‘l’。

多个数字间隔连续

[a-zA-Z0-9]+(?:\.[a-zA-Z0-9]+)*

测试

hello.world => hello.world

hello……world => hello

hello.world.hello.to => hello.world.hello.to

hello……world.hello.to => hello

hello.world.hello……to => hello.world.hello

知识点

"(?:x)":匹配 ‘x’ 但是不记住匹配项。这种括号叫作非捕获括号,使得你能够定义与正则表达式运算符一起使用的子表达式。

例子:/(?:\d{3}|(\d{3}))([-\/.])\d{3}\1\d{4}/。

(?: 这个正则表达式寻找三个数字字符\d{3} 或者 | 一个左半括号\(跟着三位数字\d{3}, 
跟着一个封闭括号 \), (结束非捕获括号 )), 后跟着一个短破折号或正斜杠或小数点,
随后跟随三个数字字符,当记忆字符 ([-\/\.])捕获并记住,后面跟着三位小数 \d{3},
再后面跟随记住的破折号、正斜杠或小数点 \1,最后跟着四位小数 \d{4}

例子:(?:\d+)

匹配一次或多次数字字符,但是不能记住匹配的字符。

"*":匹配前一个表达式 0 次或多次。等价于 {0,}。

完全匹配

/^[a-zA-Z0-9]+(?:\.[a-zA-Z0-9]+)*$/

测试

hello.world => hello.world

hello……world => (空)

hello.world.hello.to => hello.world.hello.to

hello……world.hello.to => (空)

hello.world.hello……to => (空)

知识点

"^":匹配输入的开始。如果多行标志被设置为 true,那么也匹配换行符后紧跟的位置。
例子:/^A/ 匹配”An E” 中的 ‘A’,不匹配 “an A” 中的 ‘A’

"$":匹配输入的结束。如果多行标示被设置为 true,那么也匹配换行符前的位置。
例子:/t$/ 匹配 “eat” 中的 ‘t’,不匹配 “eater” 中的 ‘t’

匹配@后缀

后缀:/@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))/

/^(([^<>()[\]\\.,;:\[email protected]"]+(\.[^<>()[\]\\.,;:\[email protected]"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/

优化建议

如果”_”字符允许的话,可以考虑用”\w”

"\w":匹配一个单字字符(字母、数字或者下划线)。等价于 [A-Za-z0-9_]。

例子:/\w/ 匹配 “apple,” 中的 ‘a’,”$5.28,”中的 ‘5’ 和 “3D.” 中的 ‘3’。

参考

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions

https://www.regextester.com/

文章作者: lmislm
文章链接: http://lmislm.com/2019/08/22/2019-08-22/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LMISLMのBlog