环境: 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
说明:上面代码经过读取用户输入的邮箱,判别输入的邮箱是否合法。最后输出两个不一样的提示语。