Linux學習-shell利用正則表達式驗證郵箱合法性

環境: CentOS 7.0linux

引文:在今天這個時代,Email已經成爲一種重要的通訊方式。給導師發郵件,學術研究之間的交流,etc。經常用到Email,然而Email的驗證卻有點小難度,下面給出一個在Linux下使用shell腳本編寫的一個實例。正則表達式

linux中將正則表達式和sed、gawk結合起來,功能很是強大。我說的是真的,沒騙你的,好好學吧。shell

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

username@hostname服務器

1.username部分模式匹配

username的值能夠用字符數子字符以及如下特殊字符:dom

  • 點號
  • 單破折號
  • 加號
  • 下劃線

在有效的Email用戶名中,這些字符能夠以任意的組合形式出現。測試

@符號前面的是hostname部分this

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

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

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個字符。下面是頂級域名用的正則表達式模式:

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

拼到一塊兒後,到一塊兒整個模式以下:

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

3.編寫shell腳本文件

#!/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

 

說明:上面代碼經過讀取用戶輸入的郵箱,判別輸入的郵箱是否合法。最後輸出兩個不一樣的提示語。

4.測試

這裏寫圖片描述

相關文章
相關標籤/搜索