您的位置:首页 > 运维架构 > Shell

shell实例浅谈之检测用户输入串的合法性

2015-01-04 22:17 316 查看


一、问题

要求用户输入的串由大小写字母、数字组成,无标点、特殊符号和空格。


二、详解

1、替换法

将输入的串中非字母数字的内容删除或替换成空后,若与原来输入的相同则合法,否则不合法。

[cpp]
view plaincopy





#!/bin/bash

isValidAlphaNumber()
{
result="$(echo $1 | sed 's/[^[:alnum:]]//g')" #替换非字母数字为空格
#$()等价``,因此上句等价于result=`echo $1 | sed 's/[^[:alnum:]]//g'`
#[:alnum:]等价于0-9A-Za-z中的一个字符,[[:alnum:]]是字母数字集,而[^[:alnum:]]表示除了所有字母数字外的任一字符
if [ "$result" != "$1" ]
then
return 1 #novalid
else
return 0 #valid
fi
}

###########代码执行起始位置###############
echo -n "Enter input:" #强制不换行
read input #读取输入

echo $input
if ! isValidAlphaNumber2 "$input" #调用函数
then
echo "invalide"
exit 1
else
echo "valide"
fi
exit 0

该方法为常用方法,判断字符串是否为数字也是采用替换法。

[cpp]
view plaincopy





strIsNumber()
{
if [ -n "$1" ]; then
STR_TEMP=`echo "$1" | sed 's/[0-9]//g'`
if [ -z "$STR_TEMP" ]; then
return 0
fi
fi
return 1
}

2、顺序判断法

依次顺序比较字符串的每一个字符,效率比上述低一些。

[cpp]
view plaincopy





#!/bin/bash

isValidAlphaNumber()
{
tempstr=$1
for((i=1; i<=${#tempstr}; i++))
do
if [[ `echo $tempstr | cut -c$i` != [a-zA-Z0-9] ]]
#cut -c依次取字符,[[ ]]支持字符串的模式匹配
then
return 1
fi
done
return 0
}

###########代码执行起始位置###############
echo -n "Enter input:" #强制不换行
read input #读取输入

echo $input
if ! isValidAlphaNumber "$input" #调用函数
then
echo "invalide"
exit 1
else
echo "valide"
fi
exit 0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: