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

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

  • 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);
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 我希望,有個如你一般的人,如山間清爽的風,溫暖的光,從清晨到夜晚,由山野到書房,等待,不怕歲月蹉跎,不怕路途遙遠,...
    anorar閱讀 218評論 0 1
  • 占個位置....1、什么是面向對象 很多人在用面向對象,卻說不出來。 2、類與對象 3、面向對象的三大特性:封裝、...
    黑客軍團_charles閱讀 246評論 0 0
  • 整數對 問題描述 : Gardon和小希玩了一個游戲,Gardon隨便想了一個數A(首位不能為0),把它去掉一個數...
    碧影江白閱讀 743評論 1 2