仿着新浪微博注冊時的郵箱地址驗證功能,寫了個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,表單驗證還是有局限性的。為了獲得真實有效的郵箱,並為用戶提供找回密碼、推送信息等服務,一般網站注冊都會有郵箱激活注冊機制,可以很好解決此類問題,不過會增加用戶注冊成本,造成用戶注冊過程中流失,這個只能按網站需求權衡了。
