環境: CentOS 7.0linux
引文:在今天這個時代,Email已經成爲一種重要的通訊方式。給導師發郵件,學術研究之間的交流,etc。經常用到Email,然而Email的驗證卻有點小難度,下面給出一個在Linux下使用shell腳本編寫的一個實例。正則表達式
linux中將正則表達式和sed、gawk結合起來,功能很是強大。我說的是真的,沒騙你的,好好學吧。shell
郵箱驗證
Email地址的基本格式爲:bash
username@hostname服務器
username的值能夠用字符數子字符以及如下特殊字符:dom
在有效的Email用戶名中,這些字符能夠以任意的組合形式出現。測試
@符號前面的是hostname部分this
^([a-zA-Z0-9_\-\.\+]+)spa
‘^’:表示整個模式以它前面的字符開頭
‘+’:表示前面的字符至少出現一次
‘[]’:表示中括號內的符號任意組合都行.net
Email地址的hostname部分由一個域名和一個服務器名組成。服務器名和域名也要遵守嚴格的命名規則,只容許字母數字字符以及如下特殊字符:
服務器名和域名都用點號分隔開,先指定服務器名,緊接着指定子域名,最後是後面不帶點號的頂級域名。
hostname模式是@後面的部分
([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$
‘$’:表示以它前面的字符結尾
([a-zA-Z0-9_\-\.]+)
能夠匹配的有
server
server.subdomain
server.subdomain.subsomain
對於頂級域名,有一些特殊的規則。頂級域名只能是字母字符,必須很多於兩個字符,而且長度不得超過5個字符。下面是頂級域名用的正則表達式模式:
\.([a-zA-Z]{2,5})$
拼到一塊兒後,到一塊兒整個模式以下:
^([a-zA-Z0-9_\-\.\+]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$
#!/bin/bash
# this file use to check email
echo "please input you email:"
read email
str=`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
將上面的代碼寫到腳本里面去,isEmail.sh
說明:上面代碼經過讀取用戶輸入的郵箱,判別輸入的郵箱是否合法。最後輸出兩個不一樣的提示語。