標籤: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驗證郵箱合法性