書寫一個用於驗證郵箱的正則表達式

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

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

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

  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);
複製代碼
相關文章
相關標籤/搜索