Linux學習-shell利用Regex驗證郵箱合法性

來源:互聯網
上載者:User

標籤:shell   Regex   執行個體   格式   linux   

引文:在今天這個時代,Email已經成為一種重要的通訊方式。給導師發郵件,學術研究之間的交流,etc。常常用到Email,然而Email的驗證卻有點小難度,下面給出一個在Linux下使用shell指令碼編寫的一個執行個體。

linux中將Regex和sed、gawk結合起來,功能非常強大。我說的是真的,沒騙你的,好好學吧。

郵箱驗證
Email地址的基本格式為:

username@hostname
1.username部分模式比對

username的值可以用字元數子字元以及以下特殊字元:

  • 點號
  • 單破折號
  • 加號
  • 底線

在有效Email使用者名稱中,這些字元可以以任意的組合形式出現。

@符號前面的是hostname部分

^([a-zA-Z0-9_\-\.\+]+)

‘^’:表示整個模式以它前面的字元開頭
‘+’:表示前面的字元至少出現一次
‘[]’:表示中括弧內的符號任意組合都行

2.hostname模式比對

Email地址的hostname部分由一個網域名稱和一個伺服器名組成。伺服器名和網域名稱也要遵照嚴格的命名規則,只允許字母數字字元以及以下特殊字元:

  • 點號
  • 底線

伺服器名和網域名稱都用點號分隔開,先指定伺服器名,緊接著指定子網域名稱,最後是後面不帶點號的頂級網域名稱。

hostname模式是@後面的部分

([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$

‘$’:表示以它前面的字元結尾
([a-zA-Z0-9_\-\.]+) 可以匹配的有
server
server.subdomain
server.subdomain.subsomain

對於頂級網域名稱,有一些特殊的規則。頂級網域名稱只能是字母字元,必須不少於兩個字元,並且長度不得超過5個字元。下面是頂級網域名稱用的Regex模式:

\.([a-zA-Z]{2,5})$

拼到一起後,到一起整個模式如下:

^([a-zA-Z0-9_\-\.\+]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$
3.編寫shell指令檔

將上面的代碼寫到指令碼裡面去,isEmail.sh

#!/bin/bash# this file use to check emailecho "please input you email:"read emailstr=`echo $email | gawk ‘/^([a-zA-Z0-9_\-\.\+]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$/{print $0}‘`if [ ! -n "${str}" ]then        echo "validation is wrong."else        echo "Your eamil is: ${str}"fi

說明:上面代碼通過讀取使用者輸入的郵箱,判別輸入的郵箱是否合法。最後輸出兩個不同的提示。

4.測試

Reference

[1]linux命令列與shell指令碼編程大全 第二版

本欄目Linux學習筆記專題持續更新…

Linux學習-shell利用Regex驗證郵箱合法性

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.