现在许多网站都采用了通过邮箱账号来注册用户名的方式,一来可以避免重复,而来安全性也得到保证,一举两得,很不错。

而最近HCI的官网也要重构了,部门一女生在写注册信息的表单验证的时候遇到了许多问题,其中一个就是邮箱的验证。

老实说,一开始俺就觉得邮箱验证本身就不难,不就一个正则表达式的匹配问题么,自己不会写也可以去网上找到啊。

可是等看了妹子在网上找到的邮箱正则匹配的代码之后,我自己也去谷歌了一下,发现好多所谓的“网友”写的匹配式真的是漏洞百出。没有一个符合我自己的要求的(可能我太严格了= =),于是我就打算花上个十几分钟写个匹配邮箱的正则表达式。

说实话,做跟说完全是两码事,本来我以为这么一个表达式也就几分钟的事情,结果愣是让我耗上了快半个多小时。现在让我来总结一下我遇到的问题。

a)邮箱地址后缀是提供邮箱服务商的域名后缀(也就是符号”@“后面的内容),千奇百怪,而且很多域名后缀也在不断的更新,无法做到绝对匹配,所以我这里也无能为力

b)对于符号“@”前面的字段,我们是有足够把握做到绝对的匹配的,因为事实上要验证的规则”不多“

c)为什么”不多“加了引号呢?因为其实规则真心挺多的。首先,不同的邮箱服务提供商对自己的邮箱命名规则就没有一个统一的标准。163邮箱允许字母+数字+下划线,而对下划线的个数已经重复方式也没有严格规定,所以也就导致了有类似于“a______v@163.com”这样的邮箱地址。而谷歌邮箱更是奇葩,它居然不支持下划线,却支持英文句点“.”,如果你不介意,你完全可以注册一个类似于“a.b.c.d.e.f@gmail.com"的邮箱。所以,邮箱格式的多样化就造成了正则表达式可能会比较复杂。

d)不过好消息是,无论是国内的163还是国外的谷歌,都不允许符号字符开头或结尾。这给了我们一个十分良好的信息。因为那样我们就可以放心地关注字符串中间的那些字符的匹配了(因为开头和结尾必定是数字或字母)。

e)网上许多网友写的邮箱正则表达式都很不严谨,居然能匹配到"___a___@163.com""abc@kkk.com.com.com.com"这类奇葩的邮箱地址。这是我不能忍受的。

综上所述,我纠结了半个多小时之后终于将比较严谨的正则表达式憋出来了:

/^[a-zA-Z0-9]([a-zA-Z0-9]|_+[a-zA-Z0-9]|[a-zA-Z0-9]*\.[a-zA-Z0-9])+@\w+\.[a-zA-Z]{1,4}\.{0,1}[a-zA-Z]{0,4}$/

总结:本人乃小菜一颗,上述的表达式纯属个人见解,若各位大神有更好的匹配式,欢迎指点。PS:对于邮箱的域名后缀的匹配本人实在无能为力,如果有知道如何解决的大神,请赐教,感激不尽!

正则表达式匹配邮箱账号相关推荐

  1. java邮箱地址正则表达式_Java 正则表达式匹配邮箱地址

    作者 : 卿笃军 正则表达式中的部分元字符: 元字符 正则表达式中的写法 意义 . . 代表任意一个字符 \d \\d 代表0~9的任何一个数字 \D \\D 代表任何一个非数字字符 \s \\s 代 ...

  2. JS常用的正则表达式(匹配邮箱、名字、手机号等等)

    JS常用的正则表达式(匹配邮箱.名字.手机号等等) /* 匹配英文或字符名字的正则表达式 */ var userNameReg = /^\w{6,30}$/; /* 匹配邮箱的正则表达式 */ var ...

  3. 正则表达式匹配邮箱 php,php中匹配邮箱地址正则表达式

    一篇php中匹配邮箱地址正则表达式实例,邮箱地址替换正则我常用的正则匹配表达式:/^[a-z]([a-z0-9]*[-_]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+ ...

  4. 【linux】函数grep正则表达式匹配邮箱地址

    这个问题是看了很多文章总结而得,还没有了解shell编程的朋友们可以来看看,自己的一些见解,欢迎指出错误和不足.话不多说,我们直接进入主题! 如何直接用命令匹配邮箱地址? 首先我们要知道常见的邮箱格式 ...

  5. input正则邮箱_用正则表达式匹配邮箱地址

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  6. #小练习 正则表达式匹配邮箱名称

    s='zhg@142.com,    ziiwe@163.com,zh__1334@sin.com, zhg223@sina.com, [Master]zhg13@sina.com,[科比]Kobe@ ...

  7. Python匹配邮箱号的正则表达式

    Python中用正则表达式匹配邮箱地址可以使用如下代码: import repattern = r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}'str ...

  8. php用正则_php 正则表达式匹配(持续更新)

    正则表达式匹配网址: header('Content-type:text/html;charset=utf-8'); $str = ' 百度http://www.baidu.com网站 谷歌https ...

  9. 正则表达式:邮箱匹配

    格式概述 邮箱地址符合"名称@域名"规则.字符"@"在邮箱地址的"名称"和"域名"之间,邮箱地址名称只允许由英文字母.数 ...

最新文章

  1. airpods pro连接安卓声音小_安卓(一加5)用airpods音量偏低怎么解决?
  2. 响应格式html,设置响应格式的HTML邮件
  3. hadoop中job.setOutputFormatClass(PartitionByCoun...
  4. Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(八)
  5. 2016年第二季度DDoS攻击同比增长129%
  6. Java Integer类中的parseInt和valueOf的区别
  7. Lua开发工作笔记0001---什么是热更新为什么要热更
  8. PDF文件能编辑吗,怎么删除PDF文档中的空白页
  9. 对机器学习实战第二章内容的思考
  10. 2021微信公开课PRO:微信视频号首次公布运营规则,“点赞”表情成视频号年度表情
  11. matlab多行注释快捷键。
  12. Python新手接了第一个副业单子,2小时完成:Python修正excel表格数据
  13. 支持SwiftUI!Swift版图片视频浏览器-JFHeroBrowser上线啦
  14. 吴峰光杀进 Linux 内核
  15. 《Visual Basic.Net 循序渐进》阅读器说明
  16. 亲测有效!解决文件名过长无法删除的情况
  17. Python学习笔记-系统性能信息模块psutil
  18. 尚德机构退费难的问题
  19. react全局状态管理_Recoil - Facebook 官方 React 状态管理器
  20. mysql怎么求时间差

热门文章

  1. oracle 如何备份.bak,Oracle备份如何到异机还原
  2. 如何对网站排名进行优化?带你深入理解SEO
  3. (项目)在线教育平台(九)
  4. 孤立词语音识别(3)——计算MFCC系数
  5. 苹果承认新一代iPad wifi问题 正调查原因
  6. DayDreamer's Blog Qt资料整理~待续
  7. 拉卡拉支付有效提高线下支付场景效率
  8. HTML5实现立方体及透视效果
  9. 降噪算法如何评定效果?用标准的方法,科学合理的判定你的降噪算法效果。
  10. c语言监视,C语言设置监视哨的顺序查找、折半查找算法的实现