書寫一個用於驗證郵箱的正規表示式

小珥_Boy發表於2019-03-12

首來看幾個合法郵箱的例子:

  • 1234@qq.com(純數字)
  • wang@126.com(純字母)
  • wang123@126.com(數字、字母混合)
  • wang123@vip.163.com(多級域名)
  • wang_email@outlook.com(含下劃線 _
  • wang.email@gmail.com(含英語句號 .

根據對以上郵箱的觀察,可將郵箱分為兩部分(“@”左邊和右邊部分)來進行分析:

  1. 左邊部分可以有數字、字母、下劃線(_)和英語句號(.),因此可以表示成:[A-Za-z0-9]+([_\.][A-Za-z0-9]+)*
  2. 右邊部分是域名,按照域名的規則,可以有數字、字母、短橫線(-)和英語句號(.),另外頂級域名一般為 2 ~ 6 個英文字母(比如“cn”、“com”、“site”、“group”、“online”),故可表示為:([A-Za-z0-9\-]+\.)+[A-Za-z]{2,6}

注意兩點:

  • 考慮到匹配郵箱時字串的一頭一尾不能有其它字元,故要加上開始標誌元字元 ^ 和結束標誌元字元 $
  • 英語句號(.)是正規表示式的元字元,因此要進行轉義(\.)。

用於郵箱驗證的函式及測試用例如下:

/* 用於郵箱驗證的函式 */
function validateEmail (email) {
  // 郵箱驗證正則
  var reg = /^[A-Za-z0-9]+([_\.][A-Za-z0-9]+)*@([A-Za-z0-9\-]+\.)+[A-Za-z]{2,6}$/;
  return reg.test(email);
}

// 測試用例
var emailArr = ['1234@qq.com', 'wang@126.com', 'wang123@126.com', 'wang123@vip.163.com', 'wang_email@outlook.com', 'wang.email@gmail.com'];

var res = emailArr.map(function (item) {
  if (validateEmail(item)) {
    return item + ' 有效';
  }
  return item + ' 無效';
});
// 測試用例均有效
console.log(res);
複製程式碼

相關文章