仿着新浪微博注册时的邮箱地址验证功能,写了个javascript正则验证程序,来简单过滤不符合格式的注册邮箱地址。以下是折腾记录~
写正则表达式来验证邮箱之前,还是先来了解下邮箱注册的格式,邮箱由“邮箱用户名@网站名.顶级域名”组成,“邮箱用户名”的命名规则一般为由字母、数字、下划线、减号、英文点号组成,“网站域名”一般由字母和数字或中间加一个减号组成。先来看看主流免费域名服务商的注册规则。
QQ邮箱和foxmail邮箱(最为严格合理):
新浪邮箱:
163或126邮箱:
outlook邮箱和live邮箱:
Gmail邮箱:
搜狐邮箱:
可以看到目前国内使用的主流邮箱用户名规则已经很明朗了,点、减号、下划线一般都是作为分割用户名的功能,不能放在开头,当然一些站长或企业可以使用自建的企业邮箱,用户名命名可能会不受限制有些不“规范”,如果遇到极少数像-_-lll@xxx.com或_______@xxx.com这种标新立异的奇葩邮箱地址,还是直接过滤吧-_-lll。顶级域名为2-4位的字母,邮箱后缀有时候会用到二三级域名比如xxxx@vip.qq.com,还要考虑com.cn、net.cn这种顶级域名。
现在把需要验证的正则表达式用中文梳理下:字母或数字开头 + 字母、数字或点、下划线和减号 + @ + 一级域名或二级域名 + 顶级域名
把上面的中文翻译成正则表达式就是
var reg=/^[a-z0-9](\w|\.|-)*@([a-z0-9]+-?[a-z0-9]+\.){1,3}[a-z]{2,4}$/i;
一段仿新浪注册邮箱验证功能的javascript代码
window.onload=function(){
var oTxt=document.getElementById('txt'); var oBtn=document.getElementById('btn'); oBtn.onclick=function(){ var email=oTxt.value.replace(/^\s+|\s+$/g,"").toLowerCase();//去除前后空格并转小写 var reg=/^[a-z0-9](\w|\.|-)*@([a-z0-9]+-?[a-z0-9]+\.){1,3}[a-z]{2,4}$/i; if (email.match(reg)==null) { alert("请输入有效的邮箱地址"); } else{ alert("OK"); }; } }
表单的javascript正则验证邮箱只能根据邮箱格式简单判断是否有效,提示并纠正用户邮箱输入错误,但不能防止恶意注册,据我了解一些用户怕邮箱隐私泄露收到垃圾邮件讨厌某某网站或搞营销广告之类的理由云云,总爱虚构邮箱注册如aa@aa.aa,表单验证还是有局限性的。为了获得真实有效的邮箱,并为用户提供找回密码、推送信息等服务,一般网站注册都会有邮箱激活注册机制,可以很好解决此类问题,不过会增加用户注册成本,造成用户注册过程中流失,这个只能按网站需求权衡了。